Всем привет! Проблема такая, при запуске под вистой моя аппа прибивается системой безописности. Говорят что проблема лечится при помощи манифеста, подскажите плиз где взять этот самый минифест и как его граматно прикрутить (пишу на MASM-е). Сенькс
Код (Text): <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level='requireAdministrator' uiAccess='true' /> </requestedPrivileges> </security> </trustInfo> </assembly> тебя будут интересовать значения в теге <requestedPrivileges> level может быть: requireAdministrator, highestAvailable, asInvoker описание думаю без проблем найдешь в сети. сам манифест должен быть или в ресурсах бинарника или с ним в одном каталоге <appname>.manifest, если не ошибаюсь
ATX В >=VS 2008 требуемый уровень привилегий UAC можно задать в настройках (Linker -> Manifest File -> UAC Execution Level).
Виста может не прибивать приложение а не давать его запустить если например для выполнения оно требует повышений а ты его запускаешь по WinExec(). По ShellExecute() если запускать то нормально должно работать
Спасибо за помощь, никак немогу прикрутить манифест( Проект сделан на MASM-е, проблема в том что один манифест у меня уже прописан в файле ресурсов (стиль ХР). 1 24 manifest.xml ; <- Change to XP style 2 24 UACmanifest.xml ; <- UAC manifest почему-то никакого эфекта от манифеста нет, подскажите плиз что не так...?
Хорошая мысль, только я в xml не волоку, может кто посабит склеить? XP Style Код (Text): <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="QvasiModo.Programming.FileTypes" type="win32" /> <description>XP Style</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> Vista Код (Text): <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level='requireAdministrator' uiAccess='true' /> </requestedPrivileges> </security> </trustInfo> </assembly>
Код (Text): <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="QvasiModo.Programming.FileTypes" type="win32" /> <description>XP Style</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level='requireAdministrator' uiAccess='true' /> </requestedPrivileges> </security> </trustInfo> </assembly> ?
Спасибо ohne Манифест вкомпилился, но бинарь в висте перестал запускаться, ругается - "Сервер возвратил ссылку" и тишина. В чем трабла?
Вот что я нашел: Hello, This error is comming up because you are attempting to execute an application with uiaccess=true that has not been signed. Vista places the following restriction on apps requesting uiAccess: - They must have a trusted, valid digital signature - If enabled by group policy (default), they must reside in a trusted filesystem location (programfiles, windows) uiAccess is intended only for accessibility applications, and may only receive a windows logo thru a waiver. If this is a product that is intended for external distribution, you should look for a way to do what you need to do without needing uiAccess. If this is an internal product that you use for testing, you can created a new test-signing root certificate, add that root certificate to the "trusted certificate" list, and then sign your app using that certificate. NOTE: These instructions assume you have visual studio installed and are using a command prompt that has all the environment variables set to find SDK utilities such as makecert and signtool. If not, you will need to find these tools on your hard drive before running them. http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/3455-error-referral-returned-server.html
Всем спасибо! Ниже приложенный код манифеста работает (в нем стиль для XP + UAC), конечно бинарник автоматом не запускается, но покрайней мере виста его хоть не прибивает, а вежливо спрашивает у юзера: запускать его или нет Код (Text): <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="QvasiModo.Programming.FileTypes" type="win32" /> <description>XP Style</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level='requireAdministrator' uiAccess='false' /> </requestedPrivileges> </security> </trustInfo> </assembly> p.s. Для запуска бинарника требующего админовских прав, всеже нужна цифровая подпись.
С этим манифестом винда и будет запускать бинарник с правами админа. А вот параметр uiAccess, который требует цифровой подписи, отвечает за то, будет ли разрешено приложению лезть в чужие окна.