使用 Windows 8 和 8.1 在启动时启动程序

Starting a Program on Startup with Windows 8 and 8.1

我在 Windows 8 32 位和 8.1 32 位上启动时将程序设置为 运行 时遇到问题,但它在 8 和 8.1 64 位和其他 OS.

我正在安装我们软件的最新版本并设置一个新的 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 注册表项,其中包含可执行文件 ("C:\Program Files......exe") 的路径。

该程序没有 运行 或在任务管理器中显示为试图 run/start。 运行 文件夹中的其他程序正在启动并 运行ning,另外我通过添加 notepad.exe 进行了测试,它可以正常打开。

如果我 运行 来自命令的路径 window 它打开并开始正常。我可以创建一个批处理文件,该批处理文件将在启动时 运行,但它仍然不会 运行 来自该批处理文件的 EXE。如果我创建一个 EXE 包装器以该路径启动进程,它将 运行 EXE 然后也将在路径中启动 EXE。

有人知道为什么它不会 运行 路径中的 EXE 吗?

function MethodName(hMSI)
    NUMBER nOptions, nType, nSize;
    STRING strPath;
begin
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    nOptions = REGDB_OPTIONS;
    nType = REGDB_STRING;
    REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
    if (RegDBGetKeyValueEx("SOFTWARE\Temp", "PathLocation", nType, strPath, nSize) < 0) then
        RegDBGetKeyValueEx("SOFTWARE\Wow6432Node\Temp", "PathLocation", nType, strPath, nSize);
    endif;
    if (SYSINFO.bIsWow64) then
        RegDBSetKeyValueEx("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run", "RunKey", nType, strPath, nSize);
    else
        RegDBSetKeyValueEx("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "RunKey", nType, strPath, nSize);
    endif;
    REGDB_OPTIONS = nOptions;
end;

实现此目的的一种有点 hacky 的方法是将可执行文件的快捷方式添加到 %appdata%\Microsoft\Windows\Start Menu\Programs\Startup\

对于 InstallShield,您似乎需要 AddFolderIcon 功能:

AddFolderIcon(FOLDER_STARTUP, "The name of the shortcut", "C:\YourProgram.exe", "", "C:\PathTo\YourIcon.ico", 0, "", REPLACE);

查看 here 以了解如何使用它的完整示例。