Как установить" запустить эту программу от имени администратора " программно

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

" вы не должны требовать, чтобы ваше приложение было повышено."
А этот-да. C'est la vie.

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

" BDE is устаревший, вы должны использовать dbExpress"
Полтора миллиона строк кода. 'Nuff сказал.

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

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

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

7 ответов


вы можете программно установить флаг" запустить эту программу как администратор " (параметр, который вы найдете на вкладке совместимости свойств 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 окна 98
WIN4SP5 ОС Windows NT 4.0 с пакетом обновления 5
2000 на Windows 2000 с
WINXPSP2 Windows XP SP2
WINXPSP3 Windows XP SP3
VISTARTM Vista
VISTASP1 Vista с пакетом обновления 1
VISTASP2 Vista с пакетом обновления 2
WIN7RTM Windows 7
WINSRV03SP1 Windows Server 2003 SP1
WINSRV08SP1 Windows Server 2008 SP1

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

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

REG добавить " HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers " / v "C:\temp\compatmodel\iconsext.ехе" /Т типа reg_sz /D "в WINXPSP3 runasadmin для" Х /ф

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


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


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


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


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

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


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

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


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