Ярлык при запуске системы запускается не для других пользователей, а только для администратора
Я программно создал ярлык приложения на панели задач в C:\ProgramData\Microsoft\Windows\ Пуск \ Меню \ Программы \ Автозагрузка. Но мое приложение в трее не запускается при входе в систему для любого пользователя. Это только для администратора. Может кто-нибудь, пожалуйста, скажите мне, я потратил целый день, чтобы решить эту проблему, но не могу ее исправить..
var startupFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup);
var shell = new WshShell();
var shortCutLinkFilePath = string.Format("{0}\\{1}", startupFolderPath, "MyShortcut.lnk");
var windowsApplicationShortcut = (IWshShortcut)shell.CreateShortcut(shortCutLinkFilePath);
windowsApplicationShortcut.Description = "Shortcut for My Tray application.";
windowsApplicationShortcut.WorkingDirectory = assemblyPath;
windowsApplicationShortcut.TargetPath = executablePath;
windowsApplicationShortcut.Save();
1 ответ
Я думаю, что есть несколько способов справиться с этим:
Как отмечает Гарри Джонстон, программа не будет запускаться с повышенными правами доступа из папки "Автозагрузка" (или аналогичных мест "запуска при входе в систему"). Но если у него есть манифест повышения, вы сможете запустить его с помощью оболочки, тогда он запросит повышение прав, потому что он больше не запускается непосредственно из автозагрузки. Ярлык автозагрузки может иметь параметр командной строки, чтобы быстро узнать, что это из автозагрузки, а затем запустить путь к исполняемому файлу с помощью ShellExecute() или Process.Start, для которого ProcessStartInfo.UseShellExecute имеет значение true. Это должно получить porompt для повышения, который требуется для запуска повышенного кода. Предостережение: я не пробовал это, но я слышал сообщения, что это работает.
Служба может работать с повышенными правами и запускаться при запуске системы. Ваша программа запуска может быть без прав администратора и иметь протокол сообщений, чтобы попросить службу сделать что-то. Это избыточно для приложения, которое вы хотите запустить в течение короткого времени, но не для приложения типа системного монитора.