Как создать ярлык для запуска приложения с правами администратора в cmd-строке?

У меня есть установщик (Inno-Setup), который устанавливает мое приложение на путь, определенный пользователем. В конце установки я хочу создать ярлык, который запускает приложения с правами администратора. Решение должно работать на всех версиях win от winXP до Win7.

Что я могу сделать для этого?

Я знаю, что это возможно с помощью пакетного скрипта, который выполняет неприятный VB-скрипт. Недостатком является то, что всплывающее окно cmd-window и оно работает только на Win7, я думаю.

Я также попробовал команду mklink создать гиперссылку, но она не работает, потому что невозможно передать аргумент, который устанавливает привилегии администратора.

3 ответов


вы можете добавить раздел реестра, который говорит windows, чтобы выполнить вашу программу в качестве администратора:

под HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, просто добавьте ключ (REG_SZ)<Path to your exe> со значением RUNASADMIN. При запуске exe, вам будет предложено для доступа администратора.

С этим вы можете просто создать обычный ярлык для исполняемого файла, как вы сделали бы это с помощью Inno-Setup.

если вы хотите сделать это с помощью cmd или пакетного файла, вы можете использовать следующую команду:

reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "<Path to your exe>" /t REG_SZ /d RUNASADMIN

"Запуск от имени администратора" является свойством исполняемого файла, а не ярлыка. Вы должны добавить требуются манифеста это делает Windows запрашивать высоту.

чтобы сделать это в Windows XP, вам нужно будет использовать runas глагол с ShellExecute() запустить от имени другого пользователя, но это позволит исключить любую возможность доступа к локальному профилю. Это можно сделать из вашего exe, когда он обнаруживает, что он не работает с полным доступом администратора.


после создания ярлыка измените его 21-й байт (позиция 0x15) на 32 (0x20), чтобы он "запускался как администратор". Изменение его обратно на 0 делает его" нормальным " (не-администратором) ярлыком.