PDA

Просмотр полной версии : знает ли кто программный запуск другой программы с режимом совместимости?


SeregaZ
18.06.2012, 20:18
нашел функцию, где с помощью win api, можно запустить программу с правами администратора.
Procedure.i LaunchAndElevate(Exe.s,Parameters.s="")
Protected ExecFile.SHELLEXECUTEINFO
If Exe = ""
Exe = ProgramFilename()
EndIf
ExecFile\cbSize = SizeOf(ExecFile)
ExecFile\fMask = #Null
ExecFile\hwnd = GetDesktopWindow_()
ExecFile\lpVerb = @"runas"
ExecFile\lpFile = @Exe
ExecFile\lpParameters = @Parameters
ExecFile\lpDirectory = #Null
ExecFile\nShow = #SW_NORMAL
ExecFile\hInstApp = #Null
ProcedureReturn ShellExecuteEx_(ExecFile)
EndProcedure
код правда под PureBasic - но суть думаю понятна :) на прочих языках, дружащих с winapi будет примерно тот-же год.

все здорово, однако один минус - окно подтверждения запуска, ну то где весь экран темнеет и вылазит диалог "вы согласны запустить бла бла бла?" - так вот оно запускается в свернутом виде. и естественно на этот процесс этого служебного сообщения consent.exe понавешаны всякие хуки и я не могу передать фокус этому окну. на всякие блокноты да нотепады - без проблем, а этот скатина не дается :)

ну да ладно... запуск с правами администратора это пол белы, вторая проблема как бы запускать помимо прав администратора еще в режиме совместимости с XPSP3?

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

J-Fobos
19.06.2012, 01:17
Вариант, который предлагает фирма майкрософт и который рекомендуют использовать кодеры (не только рекомендуют, но и используют):
Manifest
Ну и ссылки по теме:
http://msdn.microsoft.com/en-us/library/aa375632.aspx
http://msdn.microsoft.com/ru-ru/library/k26e96zf.aspx
Может находится в папке с прогой (должен иметь такое же называние как исполняемый файл и разшерение .Manifest) или же подключатся как ресурс ехе файла (вроде бы не подлежит шифрованию, но не уверен).

SeregaZ
19.06.2012, 10:22
подобную статью читал, только нашел из более менее подходящего это:
compatibility
Contains at least one application. It has no attributes. Optional. Application manifests without a compatibility element default to Windows Vista compatibility on Windows 7.
но исходя из описания тут касается только висты и семерки:
Манифест без элемента совместимости на виндовс 7 по умолчанию включает совместимость с виндовс вистой.

Добавлено через 3 минуты
гыгыгы еще раз поискал в гугле свой запрос, и вышел опять в эту тему :)))))))))

Добавлено через 20 минут
кстати еще по манифесту: в тело программы вроде как встраивается уже манифест на стадии компилирования, а если положить рядом еще внешний файл манифеста - кто из них примется за главного?

J-Fobos
20.06.2012, 00:04
кстати еще по манифесту: в тело программы вроде как встраивается уже манифест на стадии компилирования, а если положить рядом еще внешний файл манифеста - кто из них примется за главного?
Попробовал так сделать, главный тот что в ехе файле.

SeregaZ
21.06.2012, 11:35
так... ну все :) оказалось сам дурак :) в реестре две ветки, где записаны пути до файлов и их параметры при запуске: одна что глобальные параметры для всех пользователей, а вторая ветка только для текущего пользователя. я правил те глобальные и удивлялся, почему значек безопасности не появляется. надо было править или оба, или только для текущего - тогда появляется и программа требует подтверждение при запуске :)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
глобальные права администратора и совместимости

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
юзерские права администратора и совместимости