Запустить программу при запуске windows 7 (автозапуск)
Я написал приложение, которое должно запускаться при запуске Windows. Я добавил запись в реестр Windows в HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Запись была успешно добавлена, но программа не запускается должным образом.
Я протестировал приложение на Windows 7 64 бит. Приложение должно иметь права администратора для запуска, может быть, поэтому оно не запускается?
Я также увидел, что значение записи не в кавычках, а остальные. Это обязательно?
Вот мой код C#:
var registry = Registry.CurrentUser;
var key = registry.OpenSubKey(runKeyBase, true);
key.SetValue(KEY, directory + @"\" + filename);
Registry.CurrentUser.Flush();
Как я могу заставить его работать?
3 ответа
Насколько я понимаю, это связано с настройками контроля доступа пользователей, которые позволяют запускать только подписанные приложения, иначе он будет запрашивать разрешения администратора.
Из-за этого во время запуска ОС просто не будет запускать приложение, даже если вы выполнили настройки реестра.
Также цитаты не являются обязательными. Вы можете иметь их или нет.
Я сделал так, чтобы поместить ярлык в папку "Автозагрузка". Настройки реестра не будут работать.
Кроме того, вы можете попробовать поместить файл в /system32 или /windows, а затем попробовать установить его в реестре.
Почему бы просто не поместить ярлык в папку "Автозагрузка"? Таким образом, вы также можете установить свойства ярлыка для запуска от имени администратора
Редактировать:
Перейдите к исполняемому файлу, который вы хотите запустить при запуске, и щелкните правой кнопкой мыши, создайте ярлык.
В свойствах этого ярлыка установите флажок "Запускать от имени администратора".
Затем поместите это в папку автозагрузки (вы можете получить ее, нажав Исследовать папку в меню "Пуск"). Это запустит это приложение при входе в Windows. Если UAC требует одобрения, он подскажет пользователю, можно ли запустить программу.
Вы можете самостоятельно поднять программу при запуске. Просто выполните следующий код в начале:
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
}
}