Как установить «Запускать эту программу от имени администратора» программно - PullRequest
28 голосов
/ 22 февраля 2010

У меня проблема с хорошим ol 'bdeadmin.exe в Vista. Во-первых, давайте разберемся с предсказуемыми ответами:

«Вы не должны требовать повышения уровня своей заявки».
Этот делает. C'est la vie.

"Вам необходимо встроить файл манифеста."
Он уже скомпилирован, ему уже много лет, компания, которая его создала, не собирается делать это снова и установлена ​​из модуля слияния (файл MSM).

"BDE устарел, вы должны использовать dbExpress"
Полтора миллиона строк кода. «Нуфф сказал.

"Удалите файл манифеста рядом с EXE."
Пробовал, ничего не делал. В качестве теста тот же самый файл манифеста смог заставить несколько других EXE-файлов требовать повышения прав, но не тот, который я хотел. Что-то там мешает прочтению внешнего манифеста.

"Создать ярлык и установить SLDF_RUNAS_USER."
Не могу, это апплет Панели управления.

Единственное, что сработало, это настройка «Запускать программу от имени администратора» на вкладке «Совместимость» в окне «Свойства». Я не должен был говорить пользователям, чтобы сделать это. Плохо для бизнеса. Мне нужно, чтобы установщик сделал это. Файл MSM использует статический путь.

Ответы [ 7 ]

37 голосов
/ 29 апреля 2010

Вы можете программно установить флаг «Запускать эту программу от имени администратора» (параметр, который вы найдете на вкладке «Совместимость» свойств EXE-файла), установив простой ключ реестра. Вам необходимо создать строковое значение (REG_SZ) под одним из этих ключей (если вы хотите, чтобы настройка была для пользователя или для компьютера, соответственно):

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers

или

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers

Имя значения должно быть полным путем к вашему исполняемому файлу (если путь содержит пробелы, не окружайте путь кавычками), а данные значения должны содержать строку RUNASADMIN.

Для образца:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "PUT__VALUE__HERE"

Режимы совместимости

WIN95 Windows 95
WIN98 Windows 98
WIN4SP5 Windows NT 4.0 SP5
WIN2000 Windows 2000
WINXPSP2 Windows XP SP2
WINXPSP3 Windows XP SP3
ВИСТАРТ Виста
VISTASP1 Vista SP1
VISTASP2 Vista SP2
WIN7RTM Windows 7
WINSRV03SP1 Windows Server 2003 SP1
WINSRV08SP1 Windows Server 2008 с пакетом обновления 1

Уровень привилегий

RUNASADMIN Запуск программы от имени администратора

REG ADD "HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers "/ v "C: \ temp \ compatmodel \ iconsext.exe" / t REG_SZ / d "WINXPSP3 RUNASADMIN" / F

Ссылка: http://www.verboon.info/2011/03/running-an-application-as-administrator-or-in-compatibility-mode/

6 голосов
/ 29 апреля 2010

Это длинный выстрел, но если в названии EXE-файла есть слово «setup» или «install», Windows при запуске запустит повышение прав. Я не знаю, будет ли это работать с апплетом панели управления, хотя.

1 голос
/ 09 октября 2013

Я обнаружил, что метод файла .manifest не работает, если .exe меньше C:\Program files\... и .exe ранее выполнялся без файла .manifest. Windows запоминает .manifest с первого запуска .exe. Это означает, что вы не можете просто отправить манифест, когда пользователи жалуются, что их установки не запускаются. Файл манифеста должен быть размещен до или во время той же установки, в которой находится .exe.

Windows перепроверяет .manifest, если .exe изменяется (например, новый выпуск или другое количество байтов)

1 голос
/ 03 октября 2010

Используйте программу переноса, которая использует ShellExcute, которая использует «runas» в качестве «глагола» для запуска нужной программы.

1 голос
/ 22 февраля 2010

Пробовали ли вы Microsoft Application Compatibility Toolkit ? Он анализирует ваше приложение и предоставляет совместимые прокладки, которые могут помочь решить вашу проблему.

0 голосов
/ 06 сентября 2016

Упакуйте свое приложение в WinRar SFX в режиме без вывода сообщений + режим запроса администратора.

Гораздо проще, чем возиться с переменными .MSI.

0 голосов
/ 22 февраля 2010

Я был бы удивлен, если бы это было возможно. Это был бы идеальный способ для злонамеренного кода злоупотреблять системой. Вы, вероятно, скажете пользователю, что администратор должен установить или у него должны быть права администратора (как и все другие программы в Windows).

...