如何让一个exe在Windows启动时自动运行

26

可能重复问题:
如何将exe文件放在Windows启动项中

假设我已经用C#构建了一个应用程序,一旦我安装它,我希望它在Windows启动时自动运行,或者可以说是当用户登录到他的Windows账户时自动运行。有没有办法可以做到这一点?除了编写一个Windows服务之外?

该应用程序基本上会在触发某个事件时显示消息。


可能重复的问题:https://dev59.com/X07Sa4cB1Zd3GeqP2ljw - MUS
1
@GSGuy 我不同意,因为另一个问题与WPF直接相关。 - Aidiakapi
这是一个重复的问题,但是这个问题有更好的答案。 - AndrewS
9个回答

57

将应用程序添加到Windows启动文件夹的快捷方式:

Environment.GetFolderPath(Environment.SpecialFolder.Startup)

或者添加到注册表中,就像这样:

RegistryKey add = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
add.SetValue("Your App Name", "\"" + Application.ExecutablePath.ToString() + "\"");

如果你想让代码在每个用户下都运行,可以将CurrentUser更改为LocalMachine。感谢Aidiakapi的贡献。


17
请注意,您可以将Registry.CurrentUser更改为Registry.LocalMachine以使其适用于每个用户。对于示例代码加1分。另一个提示:您可以使用@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"代替:"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"来避免转义\字符。 - Aidiakapi
@Badr... 对不起,我的无知,请问我是否需要将上述代码行放在我的C#应用程序代码中...我有些迷失:S。我能验证exe实际上会在Windows启动时启动吗? - nightWatcher
1
WPF 没有 ExecutablePath 属性。 - Ashish-BeJovial
如何为启动命令添加参数?myApp.exe --hidden true --fastbootmode true - MBH
这些方法中哪个是首选/推荐的方法?我不是很清楚,但似乎将其添加到注册表中可能是正确的方法。 - Alan Thomas

13

可以使用Windows注册表来完成。我建议您检查这些注册表键。

HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnceEx 

对于注册表的使用,我认为比使用Windows启动文件夹更专业。+1 - Aidiakapi
1
感谢Aidiakapi :D,还有...收到负评的原因是什么? - Jonathan
1
可能是因为他想要投票,而你比他早回答了。我认为StackOverflow应该禁用对自己回答的问题进行投票。 - Aidiakapi
我同意你的观点。我们在这里是为了帮助人们,而不是为了积分或徽章。这种情况应该被预防。 - Jonathan

2
你可以将应用程序添加到注册表中,使其在启动时运行。具体位置如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
或者你可以将其添加到系统的启动文件夹中。如果你不想编写服务,则这些可能是最常见/最简单的选项。

2

1

最简单的方法是将其或其快捷方式放置在%userprofile%\Start Menu\Programs\Startupdirectory%allusersprofile%\Start Menu\Programs\Startup中。

注册表键HKLM\Software\Microsoft\Windows\CurrentVersion\Run(所有用户)和HKCU\Software\Microsoft\Windows\CurrentVersion\Run(仅当前用户)也可以使用。

将其安装为服务通常是一个好方法,但如果您要像您所说的那样进行交互,则不适用。


0
你可以在 注册表 中编写可执行文件的 路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

而且它会在每次启动Windows时执行。


0
您可以将应用程序的快捷方式放在 C:\Users\@username@\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 中。
您是否正在使用 Visual Studio 安装项目?如果是,您可以直接从那里设置快捷方式。

0

嗯,这听起来你应该使用“Windows服务”。

还有其他选项,比如将EXE的快捷方式包含在程序菜单的“启动”文件夹中(如果您希望它在该系统上为所有用户运行,则为“所有用户”)。

另一个选择是使用Windows注册表。您可以添加一个指向exe的“运行”条目:

* HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
* HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
* HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
* HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

2
如果它显示消息,那么它不应该是一个服务;服务应该是非交互的。 - Jon Hanna

0

既然没有人提到,我要指出你也可以使用计划任务来实现这一点,其触发器是“系统启动时”。但是,我尚未尝试将其用于需要 UI 交互的应用程序-它适用于后台进程,但我怀疑它不适用于需要桌面上下文的东西(因为在用户登录之前没有桌面上下文)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接