在windows 7启动时启动程序(自动启动)
本文关键字:启动 自动启动 程序 windows | 更新日期: 2023-09-27 18:26:07
我写了一个应用程序,应该在windows启动时启动。我在HKCU''SOFTWARE''Microsoft''windows''CurrentVersion''Run的windows注册表中添加了一个条目。已成功添加条目,但程序未正确启动。
我已经在Windows7 64位上测试了这个应用程序。应用程序需要具有管理员权限才能运行,也许这就是它没有启动的原因?
我还看到该条目的值不在引号中,但其他值在引号中。它是强制性的吗?
这是我的c#代码:
var registry = Registry.CurrentUser;
var key = registry.OpenSubKey(runKeyBase, true);
key.SetValue(KEY, directory + @"'" + filename);
Registry.CurrentUser.Flush();
我怎么能让它工作呢?
为什么不在Startup文件夹中放置一个快捷方式?这样,您还可以设置快捷方式的属性,以管理员的身份运行
编辑:
导航到要在启动时运行的exe,右键单击,创建快捷方式。
在该快捷方式的属性中,选中以管理员身份运行。
然后将其放在启动文件夹中(单击"开始"菜单中的文件夹上的"浏览"即可到达)。这将在windows登录时启动该应用程序。如果UAC需要批准,它将提示用户是否可以运行程序。
据我所知,这是由于用户访问控制设置只允许已签名的应用程序启动,否则它将请求管理员权限。
因此,在启动过程中,即使您已经完成了注册表设置,操作系统也不会运行应用程序。
报价也不是强制性的。你可以拥有它们,也可以不拥有。
我的做法是在"启动"文件夹中放置一个快捷方式。注册表设置将不起作用
另外,您可以尝试将文件放在/system32或/windows中,然后尝试在注册表中进行设置。
您可以在启动时自提升程序。只需在开始时执行以下代码:
public static void runAsAdmin(string[] args)
{
ProcessStartInfo proc = new ProcessStartInfo();
if (args != null)
proc.Arguments = string.Concat(args);
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
proc.Verb = "runas";
bool isElevated;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
if (!isElevated)
{
try
{
Process.Start(proc);
}
catch
{
//No Admin rights, continue without them
return;
}
//Close current process for switching to elevated one
Environment.Exit(0);
}
return;
}
此外,在获得管理员权限后,您可以禁用UAC通知(如果已启用)以在未来进行静默启动:
private void disableUAC()
{
RegistryKey regKey = null;
try
{
regKey = Registry.LocalMachine.OpenSubKey(ControlServiceResources.UAC_REG_KEY, true);
}
catch (Exception e)
{
//Error accessing registry
}
try
{
regKey.SetValue("ConsentPromptBehaviorAdmin", 0);
}
catch (Exception e)
{
//Error during Promt disabling
}
}