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

时间:2015-12-01 19:26:51

标签: c# windows startup

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

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

2 个答案:

答案 0 :(得分:1)

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

FOLDERID_CommonStartup

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

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

FOLDERID_Startup

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

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

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Run中

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

HKEY_CURRENT_USER \软件\微软\的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);

答案 1 :(得分:-1)

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

在C#程序中需要做一些事情来满足作为服务组件的要求:

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

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