Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Работа с реестром (http://forum.oszone.net/showthread.php?t=237182)

Raf-9600 23-06-2012 12:52 1939263

Работа с реестром
 
Ктонить может реализовать с помощью батника или 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 1940906

Посмотрите команду REG. Например, 'reg export /?' и 'reg add /?'

Anufriev 28-06-2012 11:50 1941936

извиняюсь

gora 28-06-2012 13:49 1942047

Цитата:

Цитата Raf-9600
Ктонить может реализовать с помощью батника или 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 1942062

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


gora 28-06-2012 14:41 1942078

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 1942122

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 и разрядность) по прежнему тоже действовали на эти ключи.

gora 28-06-2012 20:04 1942268

Код:

...
(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
        )
)

...



Время: 08:39.

Время: 08:39.
© OSzone.net 2001-