I am hoping someone can help me improve a portable app I am creating.
I am trying to create a portable application loader for a game called Emperor: Battle for Dune. My biggest issue ATM is that the game relies on some registry entries that are written to HKLM (in fact, the game crashes on start if one particular key value isn't present). Writing to this hive requires admin privileges in Vista and later (if UAC is enabled) and so I have to run my PAL with admin privileges to make this work.
The PAL I have created is currently working exactly how it should. I am wondering though if I can improve things by setting up my PAL so that it doesn't need admin privileges to run the game (installing it can require admin privileges though). The idea I came up with was to have my PAL read and write registry values to the virtual store (HKCU\Software\Classes\VirtualStore\MACHINE\), install some dummy registry keys in HKLM (by install, I mean I double-clicked on the registry file with these dummy keys and added the keys to the registry) and thus, the game would read the values in the virtual store and I don't need admin privileges to run it.
Unfortunately, I've tested my idea and it isn't working. I'm convinced that the game isn't using the virtual store at all. With the dummy registry values, the game crashes on start. With the dummy values replaced with the correct values, the game starts but shows other evidence of not using the virtual store (eg. graphics setting are set to low quality rather than the highest settings defined in the registry).
Is what I am asking for possible? If so, can anyone help me get it working?
Here is my appinfo launcher.ini:
[Launch]
ProgramExecutable=Emperor\EMPEROR.exe
SinglePortableAppInstance=true
SplashTime=100
LaunchAppAfterSplash=true
;RunAsAdmin=force
RunAsAdmin2000=none
RunAsAdminXP=none
RunAsAdmin2003=none[Activate]
Registry=true[RegistryKeys]
;EmpBfD=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor
EmpBfD=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor[RegistryValueWrite]
;HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\InstallPath=REG_SZ:%PAL:AppDir%\Emperor\Emperor.EXE
;HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\FolderPath=REG_SZ:%PAL:AppDir%\Start Menu\Westwood\Emperor - Battle For Dune
;HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\HTMLPath=REG_SZ:%PAL:AppDir%\Emperor\Data\HTML
HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\InstallPath=REG_SZ:%PAL:AppDir%\Emperor\Emperor.EXE
HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\FolderPath=REG_SZ:%PAL:AppDir%\Start Menu\Westwood\Emperor - Battle For Dune
HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\HTMLPath=REG_SZ:%PAL:AppDir%\Emperor\Data\HTML[RegistryCleanupIfEmpty]
1=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Game
2=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Graphics
3=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Movies
4=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Multiplayer
5=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Network
6=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Sound
7=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\URL
8=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options
9=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor
10=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood
11=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node
12=HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE
13=HKCU\Software\Classes\VirtualStore\MACHINE
14=HKCU\Software\Classes\VirtualStore
;15=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Game
;16=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Graphics
;17=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Movies
;18=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Multiplayer
;19=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Network
;20=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Sound
;21=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\URL
;22=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor\Options
;23=HKLM\SOFTWARE\Wow6432Node\Westwood\Emperor
;24=HKLM\SOFTWARE\Wow6432Node\Westwood[DirectoriesMove]
Saves=%PAL:AppDir%\Emperor\DATA\saves
Here is the registry file I am using with the Virtual Store values and keys:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor]
"Name"="Emperor"
"InstallPath"="E:\\Games\\EA\\EmpPort\\App\\Emperor\\Emperor.EXE"
"FolderPath"="E:\\Games\\EA\\EmpPort\\App\\Start Menu\\Westwood\\Emperor - Battle For Dune"
"HTMLPath"="E:\\Games\\EA\\EmpPort\\App\\Emperor\\Data\\HTML"
"SKU"=dword:00001f00
"Version"=dword:00010009
"Serial"="(snip)"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options]
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Game]
"AutoSaveName"="AutoSave"
"GameSpeed"="4"
"Insider"=""
"IntroPlayed"="0"
"MouseSpeed"="55"
"ScrollRate"="8"
"ShowTargetLines"="1"
"Tooltips"="1"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Graphics]
"GraphicsLOD"="4"
"ColorDepth"="32"
"Shadows"="1"
"ModelLOD"="2"
"TextureLOD"="0"
"TerrainLOD"="2"
"EffectLOD"="2"
"ScreenWidth"="1440"
"ScreenHeight"="1080"
"MultiTexture"="1"
"HardwareTL"="1"
"AltDevice"="0"
"ShadowQuality"="2"
"LimitFrameRate"="0"
"LimitTo16BitTex"="0"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Movies]
"MovieListCount"="0"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Multiplayer]
"AutoLoginChoice"="NoAutoRadioButton"
"FilterLanguage"="1"
"Persona"=" - - "
"Server"=" - - "
"House"="0"
"SubHouse1"="3"
"SubHouse2"="5"
"HasSetQM"="0"
"LastLoginNickname"=""
"ServerListCount"="0"
"Locale"="0"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Network]
"SocketNumber"="0"
"DestinationNetwork"="0"
"NetworkCard"="10.43.86.100"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Sound]
"Sound"="1"
"MusicVolume"="15"
"SoundVolume"="20"
"VoiceVolume"="20"[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\WOW6432Node\Westwood\Emperor\URL]
"Ladder"="http://westwood.ea.com/westwoodonline/tournaments/emperor-ingame/index.html"
"LadderX"="http://westwood.ea.com/westwoodonline/tournaments/emperor-ingame/index.html"
"NetStatus"="http://www.westwood.ea.com/westwoodonline/embedded/emperor/networkstatus..."
"NetStatusX"="http://www.westwood.ea.com/westwoodonline/embedded/emperor/networkstatus..."
"Signup"="http://games2.westwood.com/cgi-bin/cgiclient?register&request=expand_tem..."
"SignupX"="http://games2.westwood.com/cgi-bin/cgiclient?register&request=expand_tem..."
"BattleClans"="http://battleclans.westwood.com/cgi-bin/cgiclient?dunesquad&request=expa..."
"BattleClansX"="http://battleclans.westwood.com/cgi-bin/cgiclient?dunesquad&request=expa..."
"News"="http://www.westwood.ea.com/westwoodonline/embedded/emperor/news/index.shtml"
"NewsX"="http://www.westwood.ea.com/westwoodonline/embedded/emperor/news/index.shtml"
"Insider"="http://games2.westwood.com/cgi-bin/cgiclient?register_insider&request=ex..."
"InsiderX"="http://games2.westwood.com/cgi-bin/cgiclient?register_insider&request=ex..."
Finally, this is the dummy registry file I'm using to try make the game read values from the virtual store:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Game]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Graphics]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Movies]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Multiplayer]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Network]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Westwood\Emperor\Options\Sound]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Westwood\Emperor\URL]