我如何 运行 启动程序? C#

How do i run a program on startup? c#

我正在使用 C# 开发应用程序。我想 运行 在没有管理员权限的情况下启动应用程序。我通过将应用程序本身复制到启动文件夹中,设法在启动时 运行 它,但它需要管理员权限才能执行此操作。你能告诉我如何在没有管理员权限的情况下做到这一点吗?

谢谢,抱歉英语不好,我不是本地人

作为非管理员,您只能为自己的用户帐户设置自动启动的内容。为此,您将使用 per-user startup folder(或 HKCU 注册表项之一)。

FOLDERID_CommonStartup

对于所有用户,需要管理员权限才能修改。位置取决于 OS 版本和自定义,但默认情况下是: %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\StartUp %ALLUSERSPROFILE%\Start Menu\Programs\StartUp

对于 C#,您可以使用 Environment.GetFolderPath(SpecialFolder.CommonStartup) 检索路径。

FOLDERID_Startup

每用户启动。位置取决于 OS 版本和自定义,但默认情况下是: %APPDATA%\Microsoft\Windows\Start Menu\Programs\StartUp %USERPROFILE%\Start Menu\Programs\StartUp

对于 C#,您可以使用 Environment.GetFolderPath(SpecialFolder.Startup) 检索路径。您通常希望在此处放置您的应用程序的快捷方式,但没有托管的 API,因此您需要 pinvoke 或让您的安装程序为您创建一个。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

对于所有用户,需要管理员权限才能修改。对于 C#,可以使用静态 Microsoft.Win32.Registry class.

添加条目

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

每个用户。要添加新条目:

const string HKCU = "HKEY_CURRENT_USER";
const string RUN_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
string exePath = System.Windows.Forms.Application.ExecutablePath;
Microsoft.Win32.Registry.SetValue(HKCU + "\" + RUN_KEY, "AppName", exePath);

最接近自动化的方法是创建一个安装程序,将您的应用程序安装为服务。运行服务的 "user" 在服务条目本身中定义,如果当前用户不是管理员,则可以是管理员。它还使您的服务器团队能够在该用户认为您的应用程序存在安全问题时撤销该用户的权限。

您需要在 C# 程序中做一些事情才能满足成为此处发现的服务组件的要求:

https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

请注意,这可能不适用于需要任何类型的 GUI(Winform、WPF 等)的启动程序。