Показать полную графическую версию : [решено] Работа с реестром
Raf-9600
23-06-2012, 12:52
Ктонить может реализовать с помощью батника или VB скрипта такую задачку:
1. Создание резервной копии перечисленных ниже ключей реестра (если они есть).
2. Внесение ключей реестра перечисленных ниже. При том путь “D:\Games\Diablo II” должен быть относительным. Т.е. вместо жёсткого указания, он должен указывать на папку, в которой находиться скрипт.
[HKEY_LOCAL_MACHINE\SOFTWARE\Blizzard Entertainment\Diablo II]
"DiabloIICD"=""
"InstallPath"="D:\\Games\\Diablo II"
"Program"="D:\\Games\\Diablo II\\Diablo II.exe"
"Save Path"="D:\\Games\\Diablo II\\save\\"
"SmallInstall"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Blizzard Entertainment\Diablo II\VideoConfig]
"DeviceDDraw"=dword:00000000
"DirectDrawDevice0"=dword:00000001
"Render"=dword:00000000
"VidTestRequired"="true"
[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Diablo II]
"DiabloIICD"="D:\\Games\\Diablo II"
"InstallPath"="D:\\Games\\Diablo II"
"Program"="D:\\Games\\Diablo II\\Diablo II.exe"
"Save Path"="D:\\Games\\Diablo II\\save\\"
"SmallInstall"=dword:00000000
"Resolution"=dword:00000001
"Always Run"=dword:00000001
[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Diablo II\VideoConfig]
"DeviceDDraw"=dword:00000000
"DirectDrawDevice0"=dword:00000001
"dwFlags"=dword:0000029b
"Render"=dword:00000001
"DeviceName"=""
3. Запуск Diablo II.exe с параметром –direct
4. Проверка ли запущен процесс Game.exe
5. Как только процесс Game.exe исчезает, все внесённые скриптом ключи реестра должны удаляться, после чего должно происходить восстановление тех ключей, которые были забэкаплены в самом начале.
Собсно это все нужно для создания portable версии игры.
WindowsNT
26-06-2012, 17:37
Посмотрите команду REG. Например, 'reg export /?' и 'reg add /?'
Anufriev
28-06-2012, 11:50
извиняюсь
Ктонить может реализовать с помощью батника или VB скрипта такую задачку: »
Примерно так:
@Echo Off
Set lmsw=HKLM\SOFTWARE\Blizzard Entertainment\Diablo II
Set cusw=HKCU\SOFTWARE\Blizzard Entertainment\Diablo II
Set newPath=%~dp0
Set newPath=%newPath:~0,-1%
Reg Export "%lmsw%" "old_lmsw.reg"
Reg Export "%cusw%" "old_cusw.reg"
Reg Add "%lmsw%" /v "DiabloIICD" /t REG_SZ /d "" /f
Reg Add "%lmsw%" /v "InstallPath" /t REG_SZ /d "%newPath%" /f
Reg Add "%lmsw%" /v "Program" /t REG_SZ /d "%newPath%\Diablo II.exe" /f
Reg Add "%lmsw%" /v "Save Path" /t REG_SZ /d "%newPath%\save\\" /f
Reg Add "%lmsw%" /v "SmallInstall" /t REG_DWORD /d "0x0" /f
Reg Add "%lmsw%\VideoConfig" /v "DeviceDDraw" /t REG_DWORD /d "0x0" /f
Reg Add "%lmsw%\VideoConfig" /v "DirectDrawDevice0" /t REG_DWORD /d "0x1" /f
Reg Add "%lmsw%\VideoConfig" /v "Render" /t REG_DWORD /d "0x0" /f
Reg Add "%lmsw%\VideoConfig" /v "VidTestRequired" /t REG_SZ /d "true" /f
Reg Add "%cusw%" /v "DiabloIICD" /t REG_SZ /d "%newPath%" /f
Reg Add "%cusw%" /v "InstallPath" /t REG_SZ /d "%newPath%" /f
Reg Add "%cusw%" /v "Program" /t REG_SZ /d "%newPath%\Diablo II.exe" /f
Reg Add "%cusw%" /v "Save Path" /t REG_SZ /d "%newPath%\save\\" /f
Reg Add "%cusw%" /v "SmallInstall" /t REG_DWORD /d "0x0" /f
Reg Add "%cusw%" /v "Resolution" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%" /v "Always Run" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%\VideoConfig" /v "DeviceDDraw" /t REG_DWORD /d "0x0" /f
Reg Add "%cusw%\VideoConfig" /v "DirectDrawDevice0" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%\VideoConfig" /v "dwFlags" /t REG_DWORD /d "0x29b" /f
Reg Add "%cusw%\VideoConfig" /v "Render" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%\VideoConfig" /v "DeviceName" /t REG_SZ /d "" /f
"%newPath%\Diablo II.exe" –direct
:_loop
Ping -n 6 localhost>Nul
TASKLIST /FI "IMAGENAME eq Game.exe" | Find "Game.exe">Nul
If %ErrorLevel%==0 GoTo _loop
Regedit /S "old_lmsw.reg"
Regedit /S "old_cusw.reg"
Exit
Raf-9600
28-06-2012, 14:19
gora, благодарю. Команды для удаления создаваемых ключей я сам допишу. Но возникает одна проблемка: то что в x32 системах записывается в HKLM\SOFTWARE, то в x64 системах пишется в HKLM\SOFTWARE\Wow6432Node. Возможно ли как-то учесть этот момент?
И за одно хотелось бы чтобы батник создавал пару ключей в зависимости от версии Windows. Т.е. если версия 6.0.6000 или более поздняя, чтобы создавались эти ключи:
Для системы любой разрядности:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game]
"Name"="Game.exe"
"ID"=dword:4E9DE60E
"Flags"=hex:00,08,00,00
Для x64 дополнительно ещё эти:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\Compatibility\Game]
"Name"="Game.exe"
"ID"=dword:4E9DE60E
"Flags"=hex:00,08,00,00
Raf-9600, так?
@Echo Off
SET xOS=x86
IF Defined PROCESSOR_ARCHITEW6432 (SET xOS=x64) ELSE IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET xOS=x64
Set sub=
IF %xOS%==x64 Set sub=Wow6432Node\
Set lmsw=HKLM\SOFTWARE\%sub%Blizzard Entertainment\Diablo II
Set cusw=HKCU\SOFTWARE\Blizzard Entertainment\Diablo II
Set newPath=%~dp0
Set newPath=%newPath:~0,-1%
Reg Export "%lmsw%" "old_lmsw.reg"
Reg Export "%cusw%" "old_cusw.reg"
Reg Add "%lmsw%" /v "DiabloIICD" /t REG_SZ /d "" /f
Reg Add "%lmsw%" /v "InstallPath" /t REG_SZ /d "%newPath%" /f
Reg Add "%lmsw%" /v "Program" /t REG_SZ /d "%newPath%\Diablo II.exe" /f
Reg Add "%lmsw%" /v "Save Path" /t REG_SZ /d "%newPath%\save\\" /f
Reg Add "%lmsw%" /v "SmallInstall" /t REG_DWORD /d "0x0" /f
Reg Add "%lmsw%\VideoConfig" /v "DeviceDDraw" /t REG_DWORD /d "0x0" /f
Reg Add "%lmsw%\VideoConfig" /v "DirectDrawDevice0" /t REG_DWORD /d "0x1" /f
Reg Add "%lmsw%\VideoConfig" /v "Render" /t REG_DWORD /d "0x0" /f
Reg Add "%lmsw%\VideoConfig" /v "VidTestRequired" /t REG_SZ /d "true" /f
Reg Add "%cusw%" /v "DiabloIICD" /t REG_SZ /d "%newPath%" /f
Reg Add "%cusw%" /v "InstallPath" /t REG_SZ /d "%newPath%" /f
Reg Add "%cusw%" /v "Program" /t REG_SZ /d "%newPath%\Diablo II.exe" /f
Reg Add "%cusw%" /v "Save Path" /t REG_SZ /d "%newPath%\save\\" /f
Reg Add "%cusw%" /v "SmallInstall" /t REG_DWORD /d "0x0" /f
Reg Add "%cusw%" /v "Resolution" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%" /v "Always Run" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%\VideoConfig" /v "DeviceDDraw" /t REG_DWORD /d "0x0" /f
Reg Add "%cusw%\VideoConfig" /v "DirectDrawDevice0" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%\VideoConfig" /v "dwFlags" /t REG_DWORD /d "0x29b" /f
Reg Add "%cusw%\VideoConfig" /v "Render" /t REG_DWORD /d "0x1" /f
Reg Add "%cusw%\VideoConfig" /v "DeviceName" /t REG_SZ /d "" /f
Ver | Find "6." >Nul && (
Reg Add "HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game" /v "Name" /t REG_SZ /d "Game.exe" /f
Reg Add "HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game" /v "ID" /t REG_DWORD /d "0x4E9DE60E" /f
Reg Add "HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game" /v "Flags" /t REG_BINARY /d "00080000" /f
IF %xOS%==x64 (
Reg Add "HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game" /v "Name" /t REG_SZ /d "Game.exe" /f
Reg Add "HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game" /v "ID" /t REG_DWORD /d "0x4E9DE60E" /f
Reg Add "HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game" /v "Flags" /t REG_BINARY /d "00080000" /f
)
)
"%newPath%\Diablo II.exe" –direct
:_loop
Ping -n 6 localhost>Nul
TASKLIST /FI "IMAGENAME eq Game.exe" | Find "Game.exe">Nul
If %ErrorLevel%==0 GoTo _loop
Regedit /S "old_lmsw.reg"
Regedit /S "old_cusw.reg"
Exit
Raf-9600
28-06-2012, 15:50
gora, Прекрасно! А можно ли через батник реализовать ещё один штрих - проверку версии файла?
Допустим чтобы значение в этих ключах различалось в зависимости от версии Game.exe:
"HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game /v "ID" /t REG_DWORD"
"HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game /v "ID" /t REG_DWORD"
Если версия Game.exe = 1.0.13.64 то в обеих ветках значение ключа "ID" должно быть:
"0x4E9DE60E"
А если версия Game.exe = 1.0.13.60, то:
"0x4B95CA4B"
При том нужно чтобы остальные правила (проверка на версию Windows и разрядность) по прежнему тоже действовали на эти ключи.
...
(Echo Set fso = WScript.CreateObject^("Scripting.FileSystemObject"^)
Echo Set objArgs = WScript.Arguments
Echo fso.OpenTextFile^(fso.GetParentFolderName^(WScript.ScriptFullName^) ^& "\verEXE.txt", 2, True^).WriteLine fso.GetFileVersion^(objArgs^(0^)^))>filever.vbs
cscript -nologo filever.vbs "%newPath%\Game.exe"
For /F "Tokens=* delims=" %%a In ('Type verEXE.txt') Do Set verExe=%%a
Del /Q filever.vbs verEXE.txt
:: для версии 1.0.13.64
Set ID=0x4E9DE60E
If %verExe%==1.0.13.60 Set ID=0x4B95CA4B
Ver | Find "6." >Nul && (
Reg Add "HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game" /v "Name" /t REG_SZ /d "Game.exe" /f
Reg Add "HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game" /v "ID" /t REG_DWORD /d "%ID%" /f
Reg Add "HKLM\SOFTWARE\Microsoft\DirectDraw\Compatibility\Game" /v "Flags" /t REG_BINARY /d "00080000" /f
IF %xOS%==x64 (
Reg Add "HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game" /v "Name" /t REG_SZ /d "Game.exe" /f
Reg Add "HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game" /v "ID" /t REG_DWORD /d "%ID%" /f
Reg Add "HKLM\SOFTWARE\%sub%Microsoft\DirectDraw\Compatibility\Game" /v "Flags" /t REG_BINARY /d "00080000" /f
)
)
...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.