Ярлык при запуске системы запускается не для других пользователей, а только для администратора

Я программно создал ярлык приложения на панели задач в 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 ответ

Я думаю, что есть несколько способов справиться с этим:

  1. Как отмечает Гарри Джонстон, программа не будет запускаться с повышенными правами доступа из папки "Автозагрузка" (или аналогичных мест "запуска при входе в систему"). Но если у него есть манифест повышения, вы сможете запустить его с помощью оболочки, тогда он запросит повышение прав, потому что он больше не запускается непосредственно из автозагрузки. Ярлык автозагрузки может иметь параметр командной строки, чтобы быстро узнать, что это из автозагрузки, а затем запустить путь к исполняемому файлу с помощью ShellExecute() или Process.Start, для которого ProcessStartInfo.UseShellExecute имеет значение true. Это должно получить porompt для повышения, который требуется для запуска повышенного кода. Предостережение: я не пробовал это, но я слышал сообщения, что это работает.

  2. Служба может работать с повышенными правами и запускаться при запуске системы. Ваша программа запуска может быть без прав администратора и иметь протокол сообщений, чтобы попросить службу сделать что-то. Это избыточно для приложения, которое вы хотите запустить в течение короткого времени, но не для приложения типа системного монитора.

Другие вопросы по тегам