Предполагая, что программа была написана правильно и будет работать при работе от имени обычного пользователя, вы можете указать, что она работает от имени обычного пользователя.
Примечание . Если программа не работает в Windows XP, она будет продолжать работать в Windows Vista или Windows 7. Вы можете проверить это приложение, войдя в Windows XP и посмотрев, работает ли оно. ( Это можно сделать , чтобы войти в систему Windows XP в качестве обычного пользователя, не так ли?)
Если программа не сможет правильно работать в Windows XP как обычный пользователь, она не сможет работать в Windows 7 как обычный пользователь. Если вы должны запустить программу от имени администратора в Windows XP, вы должны запустить программу от имени администратора в Windows 7.
Если вы удовлетворены тем, что программу не нужно запускать от имени администратора, вы можете добавить инструкцию Manifest для Windows о том, что ее следует запускать как обычный пользователь, которым вы являетесь.
Создайте файл манифеста в той же папке, что и ваше приложение. Например, Goldwave.exe
вы создаете:
Goldwave.exe.manifest
:
<?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="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Примечание. Это так называемый внешний манифест, поскольку он находится в отдельном файле. Вполне возможно, что приложение уже имеет манифест.
Манифесты были введены в Windows 2000 как способ объявления зависимостей от определенных версий DLL. Одно из распространенных применений этого манифеста пришло вместе с Windows XP, чтобы программы объявляли свою зависимость от 6-й версии comctl32.dll
- чтобы приложение было "тематическим".
Если в приложении уже есть встроенный манифест, Windows проигнорирует любой внешний манифест. В этом случае вам нужно будет использовать Resource Hacker для изменения встроенного RT_MANIFEST
(тип ресурса 24).
Следующее, что вы можете сделать, это проверить реестр, чтобы убедиться, что кто-то уже применил в вашей программе повышенный шим. Загрузите Regedit и проверьте:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
\Layers
Там вы, вероятно, найдете большое количество программ с разделенными пробелами:
- C:\Program Files (x86)\ACDSee32\ACDSee32.exe
HIGHDPIAWARE
- C:\Program Files (x86)\Google\Picasa3\Picasa3.exe
ELEVATECREATEPROCESS
- C:\Program Files (x86)\skiStunt\skiStunt\bin\skiStunt.exe
WINXPSP2
- C:\Program Files (x86)\Steam\Steam.exe
HIGHDPIAWARE ELEVATECREATEPROCESS
- C:\Program Files (x86)\SysInternals\autoruns.exe
ELEVATECREATEPROCESS RUNASADMIN
- C:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe
VISTASP2
- D:\Games\Call of Duty\CoDSP.exe
WINXPSP3
- D:\Shared\Win32app\Spy\SPYXX.EXE
DISABLEDWM
Убедитесь, что вашей программы там нет. Вы также можете найти аналогичный набор записей (для « всех пользователей ») в:
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers