PDA

Показать полную графическую версию : [архив].: NSIS - все вопросы :.


Страниц : 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

Комсомолец
27-06-2009, 11:52
AlexThePeacemaker, так же с ключом /S.
Uninstall.exe /S

Serega
05-07-2009, 18:50
Здравствуйте, надумал сделать конвертер рег-файлов в формат .nsi, если конечно это актуально...
В справке описано далеко не всё, поэтому решил задать вопрос в этой теме.
Как занести этот рег-файл в реестр:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\My Program]

[HKEY_LOCAL_MACHINE\SOFTWARE\My Program\System]
; REG_BINARY
"Component Information"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
; REG_NONE
"WMVFile"=hex(0):
; REG_EXPAND_SZ
"Command"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,\
00,75,00,6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,\
25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,\
00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,79,00,6e,00,\
63,00,75,00,69,00,2e,00,64,00,6c,00,6c,00,2c,00,42,00,72,00,69,00,65,00,66,\
00,63,00,61,00,73,00,65,00,5f,00,43,00,72,00,65,00,61,00,74,00,65,00,20,00,\
25,00,32,00,21,00,64,00,21,00,20,00,25,00,31,00,00,00
; REG_MULTI_SZ
"SystemBiosVersion"=hex(7):47,00,42,00,54,00,20,00,20,00,20,00,20,00,2d,00,20,\
00,34,00,32,00,33,00,30,00,32,00,65,00,33,00,31,00,00,00,41,00,77,00,61,00,\
72,00,64,00,20,00,4d,00,6f,00,64,00,75,00,6c,00,61,00,72,00,20,00,42,00,49,\
00,4f,00,53,00,20,00,76,00,36,00,2e,00,30,00,30,00,50,00,47,00,00,00,00,00
; REG_MULTI_SZ
"SmartoolX.BaseAddin,Version=\"8.0.2632.25087\",Culture=\"neutral\",FileVersion=\"8.0.2632.25087\",ProcessorArchitecture=\"MSIL\""=hex(7):74,\
00,43,00,64,00,24,00,5e,00,4b,00,32,00,6a,00,64,00,3f,00,2c,00,50,00,47,00,\
45,00,43,00,4d,00,43,00,59,00,7a,00,52,00,53,00,6d,00,61,00,72,00,74,00,6f,\
00,6f,00,6c,00,58,00,3e,00,76,00,7a,00,6c,00,72,00,2d,00,40,00,6b,00,37,00,\
29,00,3f,00,55,00,25,00,40,00,4f,00,2c,00,56,00,72,00,6a,00,34,00,48,00,00,\
00,00,00
; REG_RESOURCE_LIST
"\\Device\\0000003f.Raw"=hex(8):01,00,00,00,0f,00,00,00,ff,ff,ff,ff,00,00,00,\
00,01,00,00,00,02,03,00,00,09,00,00,00,09,00,00,00,ff,ff,ff,ff
; REG_FULL_RESOURCE_DESCRIPTOR
"Configuration Data"=hex(9):ff,ff,ff,ff,ff,ff,ff,ff,00,00,00,00,02,00,00,00,05,\
00,00,00,0c,00,00,00,00,00,00,00,00,00,00,00,80,00,ff,03,00,00,3f,00,fe,00,\
01,00,05,00,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,0c,00,00,ce,00,\
00,00,00,0f,00,00,00,01,00
; REG_RESOURCE_REQUIREMENTS_LIST
"Pci"=hex(a):48,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,01,00,00,00,01,00,01,00,11,00,00,00,00,01,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,ff,ff,ff,ff,00,00,00,00,\
08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,00,00,00,ff,\
ff,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,\
00,00,00,00,00,00,7f,01,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,02,00,00,00,00,00,00,ff,02,00,00,00,00,00,00,08,01,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,6f,03,00,00,00,\
00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,78,03,00,00,00,00,\
00,00,7a,03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,e8,02,00,00,00,00,00,00,ff,02,00,00,00,00,00,00,08,01,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,f0,01,00,00,00,00,00,00,f8,01,00,00,00,00,00,00,08,\
01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,b0,03,00,00,00,00,00,00,cf,03,\
00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e8,03,00,\
00,00,00,00,00,ff,03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,ce,01,00,00,00,00,00,00,cf,01,00,00,00,00,00,00,08,01,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,ff,03,00,00,00,00,\
00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,10,00,00,00,00,\
00,ff,ff,ff,ff,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,0f,00,00,00,00,00,ff,ff,0f,00,00,00,00,00,08,03,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,0b,00,00,00,00,00,08,03,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,0f,\
00,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,00,\
00,00,00,00,ff,ff,bf,ff,00,00,00,00
; REG_QWORD
"LastInstallTime"=hex(b):d6,1a,3e,7a,f8,c4,c9,01
; REG_DWORD
"FeatureSet"=dword:a0033fff
; REG_SZ
"1"="\"C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE\" /e"
"2"="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""
"3"="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"print:%1\""
"4"="C:\\Program Files\\Paint.NET\\PaintDotNet.exe"
"Path"="C:\\Program Files\\Paint.NET"

[HKEY_LOCAL_MACHINE\SOFTWARE\My Program\System]
; удаление данных
"Component Information"=-
; удаление секции My Program
[-HKEY_LOCAL_MACHINE\SOFTWARE\My Program]


Для Inno Setup, это бы выглядело так:
[Registry]
; Converter v.0.1.3
Root: HKLM; SubKey: SOFTWARE\My Program; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: binary; ValueName: Component Information; ValueData: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: none; ValueName: WMVFile; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: expandsz; ValueName: Command; ValueData: %SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\syncui.dll,Briefcase_Create %2!d! %1; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: multisz; ValueName: SystemBiosVersion; ValueData: GBT - 42302e31{break}Award Modular BIOS v6.00PG{break}{break}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: multisz; ValueName: "SmartoolX.BaseAddin,Version=""8.0.2632.25087"",Culture=""neutral"",FileVersion=""8.0.2632.25087"",ProcessorArchitecture=""MSIL"""; ValueData: tCd$^K2jd?,PGECMCYzRSmartoolX>vzlr-@k7)?U%@O,Vrj4H{break}{break}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: dword; ValueName: FeatureSet; ValueData: $a0033fff; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: string; ValueName: 1; ValueData: """C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"" /e"; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: string; ValueName: 2; ValueData: """C:\Program Files\Paint.NET\PaintDotNet.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: string; ValueName: 3; ValueData: """C:\Program Files\Paint.NET\PaintDotNet.exe"" ""print:%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: string; ValueName: 4; ValueData: C:\Program Files\Paint.NET\PaintDotNet.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueType: string; ValueName: Path; ValueData: C:\Program Files\Paint.NET; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program\System; ValueName: Component Information; Flags: deletevalue
Root: HKLM; SubKey: SOFTWARE\My Program; Flags: deletekey

[Code]
var
res: Integer;
reg,str: string;
// к сожалению некоторые типы ключей не поддерживаются в IS, поэтому приходится вносить изменения в реестр таким образом... :)
procedure CreateReg;
begin
reg:= ExpandConstant('{tmp}\regkey.reg');
str:= 'Windows Registry Editor Version 5.00' + #13#13 +
'[HKEY_LOCAL_MACHINE\SOFTWARE\My Program\System]' + #13 +
// тип ключа - REG_RESOURCE_LIST
'"\\Device\\0000003f.Raw"=hex(8):01,00,00,00,0f,00,00,00,ff,ff,ff,ff,00,00,00,00,01,00,00,00,02,03,00,00,09,00,00,00,09,00,00 ,00,ff,ff,ff,ff' + #13#13 +
'[HKEY_LOCAL_MACHINE\SOFTWARE\My Program\System]' + #13 +
// тип ключа - REG_FULL_RESOURCE_DESCRIPTOR
'"Configuration Data"=hex(9):ff,ff,ff,ff,ff,ff,ff,ff,00,00,00,00,02,00,00,00,05,00,00,00,0c,00,00,00,00,00,00,00,00,00,00 ,00,80,00,ff,03,00,00,3f,00,fe,00,01,00,05,00,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,0c,00, 00,ce,00,00,00,00,0f,00,00,00,01,00' + #13#13 +
'[HKEY_LOCAL_MACHINE\SOFTWARE\My Program\System]' + #13 +
// тип ключа - REG_RESOURCE_REQUIREMENTS_LIST
'"Pci"=hex(a):48,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00 ,00,01,00,01,00,11,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00, ff,ff,ff,ff,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,00,00,00,ff,f f,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,00,00,00,00,00,00,7f,01,00 ,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,00,00,00,00,ff,02,00,00, 00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,6f,03,00,00,00,0 0,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,78,03,00,00,00,00,00,00,7a,03,00,00,00,00,00 ,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e8,02,00,00,00,00,00,00,ff,02,00,00,00,00,00,00, 08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,f0,01,00,00,00,00,00,00,f8,01,00,00,00,00,00,00,08,0 1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,b0,03,00,00,00,00,00,00,cf,03,00,00,00,00,00,00,08,01,00 ,00,00,00,00,00,00,00,00,00,00,00,00,00,e8,03,00,00,00,00,00,00,ff,03,00,00,00,00,00,00,08,01,00,00, 00,00,00,00,00,00,00,00,00,00,00,00,ce,01,00,00,00,00,00,00,cf,01,00,00,00,00,00,00,08,01,00,00,00,0 0,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,ff,03,00,00,00,00,00,00,00,03,00,00,00,00,00 ,00,00,00,00,00,00,00,00,00,00,00,10,00,00,00,00,00,ff,ff,ff,ff,00,00,00,00,08,03,00,00,00,00,00,00, 00,00,00,00,00,00,00,00,00,00,0f,00,00,00,00,00,ff,ff,0f,00,00,00,00,00,08,03,00,00,00,00,00,00,00,0 0,00,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,0b,00,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00 ,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,0f,00,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00, 00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,bf,ff,00,00,00,00' + #13#13 +
'[HKEY_LOCAL_MACHINE\SOFTWARE\My Program\System]' + #13 +
// тип ключа - REG_QWORD, поддерживается в IS, начиная с версии 5.3
'"LastInstallTime"=hex(b):d6,1a,3e,7a,f8,c4,c9,01' + #13#13 +
'';
SaveStringToFile(reg, str, False);
end;
// заносим ключ в реестр
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
CreateReg;
Exec('regedit.exe',' /s ' + AddQuotes(reg),ExpandConstant('{win}'),SW_HIDE,ewWaitUntilTerminated,res);
DeleteFile(reg);
end;
end;
// при деинсталляции удаляем значения
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then begin
RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\My Program\System','\\Device\\0000003f.Raw');
RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\My Program\System','Configuration Data');
RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\My Program\System','Pci');
RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\My Program\System','LastInstallTime');
end;
end;
// -= Converter v.0.1.3 =-
// Затраченное время: 31 мсек.


Как это будет выглядеть для NSIS?

Habetdin
05-07-2009, 19:54
Serega,
4.9.2.14 WriteRegBin
root_key subkey key_name valuedata
This command writes a block of binary data to the registry. Valid values for root_key are listed under WriteRegStr. Valuedata is in hexadecimal (e.g. DEADBEEF01223211151). The error flag is set if the binary data could not be written to the registry. If the registry key doesn't exist it will be created.

WriteRegBin HKLM "Software\My Company\My Software" "Binary Value" DEADBEEF01223211151
4.9.2.15 WriteRegDWORD
root_key subkey key_name value
This command writes a dword (32 bit integer) to the registry (a user variable can be specified). Valid values for root_key are listed under WriteRegStr. The error flag is set if the dword could not be written to the registry. If the registry key doesn't exist it will be created.

WriteRegDWORD HKLM "Software\My Company\My Software" "DWORD Value" 0xDEADBEEF
4.9.2.16 WriteRegStr
root_key subkey key_name value
Write a string to the registry. See WriteRegExpandStr for more details.

WriteRegStr HKLM "Software\My Company\My Software" "String Value" "dead beef"
4.9.2.17 WriteRegExpandStr
root_key subkey key_name value
Write a string to the registry. root_key must be one of:

HKCR or HKEY_CLASSES_ROOT
HKLM or HKEY_LOCAL_MACHINE
HKCU or HKEY_CURRENT_USER
HKU or HKEY_USERS
HKCC or HKEY_CURRENT_CONFIG
HKDD or HKEY_DYN_DATA
HKPD or HKEY_PERFORMANCE_DATA
SHCTX or SHELL_CONTEXT
If root_key is SHCTX or SHELL_CONTEXT, it will be replaced with HKLM if SetShellVarContext is set to all and with HKCU if SetShellVarContext is set to current.

The error flag is set if the string could not be written to the registry. The type of the string will be REG_SZ for WriteRegStr, or REG_EXPAND_STR for WriteRegExpandStr. If the registry key doesn't exist it will be created.

WriteRegExpandStr HKLM "Software\My Company\My Software" "Expand String Value" "%WINDIR%\notepad.exe"

Serega
05-07-2009, 20:17
Habetdin, справку я прочитал. С WriteRegBin и WriteRegDWORD, в принципе понятно, но вот остальные ключи?

Повторюсь:
Как это будет выглядеть для NSIS? »

hb860
05-07-2009, 20:44
Serega,

############################### reg2nsis begin #################################
# This NSIS-script was generated by the Reg2Nsis utility #
# Author : Artem Zankovich #
# URL : http://aarrtteemm.nm.ru #
# Usage : You can freely inserts this into your setup script as inline text #
# or include file with the help of !include directive. #
# Please don't remove this header. #
################################################################################

WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program" "" ""
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Component Information" 00000000000000000000000000000000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "WMVFile"
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Command" 2500530079007300740065006d0052006f006f00740025005c00730079007300740065006d00330032005c00720075006e00 64006c006c00330032002e0065007800650020002500530079007300740065006d0052006f006f00740025005c0073007900 7300740065006d00330032005c00730079006e006300750069002e0064006c006c002c004200720069006500660063006100 730065005f004300720065006100740065002000250032002100640021002000250031000000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "SystemBiosVersion" 47004200540020002000200020002d0020003400320033003000320065003300310000004100770061007200640020004d00 6f00640075006c00610072002000420049004f0053002000760036002e00300030005000470000000000
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "$\"SmartoolX.BaseAddin,Version" "\$\"8.0.2632.25087\$\",Culture=\$\"neutral\$\",FileVersion=\$\"8.0.2632.25087\$\",ProcessorArchitecture=\$\"MSIL\$\"$\"=hex(7):74,
00,43,00,64,00,24,00,5e,00,4b,00,32,00,6a,00,64,00,3f,00,2c,00,50,00,47,00,
45,00,43,00,4d,00,43,00,59,00,7a,00,52,00,53,00,6d,00,61,00,72,00,74,00,6f,
00,6f,00,6c,00,58,00,3e,00,76,00,7a,00,6c,00,72,00,2d,00,40,00,6b,00,37,00,
29,00,3f,00,55,00,25,00,40,00,4f,00,2c,00,56,00,72,00,6a,00,34,00,48,00,00,
00,00,00"
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "\Device\0000003f.Raw" 010000000f000000ffffffff0000000001000000020300000900000009000000ffffffff
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Configuration Data" ffffffffffffffff0000000002000000050000000c00000000000000000000008000ff0300003f00fe000100050000001000 0000000000000000000000000c0000ce000000000f0000000100
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Pci" 4802000000000000000000000000000000000000000000000000000001000000010001001100000000010000000000000000 0000000000000000010000000000ffffffff00000000080100000000000000000000000000000005000000000000ffff0000 000000000801000000000000000000000000000040010000000000007f010000000000000801000000000000000000000000 00000002000000000000ff020000000000000801000000000000000000000000000000030000000000006f03000000000000 0801000000000000000000000000000078030000000000007a0300000000000008010000000000000000000000000000e802 000000000000ff0200000000000008010000000000000000000000000000f001000000000000f80100000000000008010000 000000000000000000000000b003000000000000cf0300000000000008010000000000000000000000000000e80300000000 0000ff0300000000000008010000000000000000000000000000ce01000000000000cf010000000000000801000000000000 00000000000000000001000000000000ff03000000000000000300000000000000000000000000000000100000000000ffff ffff000000000803000000000000000000000000000000000f0000000000ffff0f0000000000080300000000000000000000 000000000000080000000000ffff0b0000000000080300000000000000000000000000000000080000000000ffff0f000000 0000080300000000000000000000000000000000080000000000ffffbfff00000000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "LastInstallTime" d61a3e7af8c4c901
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "FeatureSet" 0xa0033fff
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "1" "\$\"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE\$\" /e"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "2" "\$\"C:\Program Files\Paint.NET\PaintDotNet.exe\$\" \$\"%1\$\""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "3" "\$\"C:\Program Files\Paint.NET\PaintDotNet.exe\$\" \$\"print:%1\$\""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "4" "C:\Program Files\Paint.NET\PaintDotNet.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Path" "C:\Program Files\Paint.NET"
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Component Information" 00000000000000000000000000000000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "WMVFile"
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Command" 2500530079007300740065006d0052006f006f00740025005c00730079007300740065006d00330032005c00720075006e00 64006c006c00330032002e0065007800650020002500530079007300740065006d0052006f006f00740025005c0073007900 7300740065006d00330032005c00730079006e006300750069002e0064006c006c002c004200720069006500660063006100 730065005f004300720065006100740065002000250032002100640021002000250031000000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "SystemBiosVersion" 47004200540020002000200020002d0020003400320033003000320065003300310000004100770061007200640020004d00 6f00640075006c00610072002000420049004f0053002000760036002e00300030005000470000000000
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "$\"SmartoolX.BaseAddin,Version" "\$\"8.0.2632.25087\$\",Culture=\$\"neutral\$\",FileVersion=\$\"8.0.2632.25087\$\",ProcessorArchitecture=\$\"MSIL\$\"$\"=hex(7):74,
00,43,00,64,00,24,00,5e,00,4b,00,32,00,6a,00,64,00,3f,00,2c,00,50,00,47,00,
45,00,43,00,4d,00,43,00,59,00,7a,00,52,00,53,00,6d,00,61,00,72,00,74,00,6f,
00,6f,00,6c,00,58,00,3e,00,76,00,7a,00,6c,00,72,00,2d,00,40,00,6b,00,37,00,
29,00,3f,00,55,00,25,00,40,00,4f,00,2c,00,56,00,72,00,6a,00,34,00,48,00,00,
00,00,00"
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "\Device\0000003f.Raw" 010000000f000000ffffffff0000000001000000020300000900000009000000ffffffff
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Configuration Data" ffffffffffffffff0000000002000000050000000c00000000000000000000008000ff0300003f00fe000100050000001000 0000000000000000000000000c0000ce000000000f0000000100
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Pci" 4802000000000000000000000000000000000000000000000000000001000000010001001100000000010000000000000000 0000000000000000010000000000ffffffff00000000080100000000000000000000000000000005000000000000ffff0000 000000000801000000000000000000000000000040010000000000007f010000000000000801000000000000000000000000 00000002000000000000ff020000000000000801000000000000000000000000000000030000000000006f03000000000000 0801000000000000000000000000000078030000000000007a0300000000000008010000000000000000000000000000e802 000000000000ff0200000000000008010000000000000000000000000000f001000000000000f80100000000000008010000 000000000000000000000000b003000000000000cf0300000000000008010000000000000000000000000000e80300000000 0000ff0300000000000008010000000000000000000000000000ce01000000000000cf010000000000000801000000000000 00000000000000000001000000000000ff03000000000000000300000000000000000000000000000000100000000000ffff ffff000000000803000000000000000000000000000000000f0000000000ffff0f0000000000080300000000000000000000 000000000000080000000000ffff0b0000000000080300000000000000000000000000000000080000000000ffff0f000000 0000080300000000000000000000000000000000080000000000ffffbfff00000000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "LastInstallTime" d61a3e7af8c4c901
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "FeatureSet" 0xa0033fff
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "1" "\$\"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE\$\" /e"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "2" "\$\"C:\Program Files\Paint.NET\PaintDotNet.exe\$\" \$\"%1\$\""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "3" "\$\"C:\Program Files\Paint.NET\PaintDotNet.exe\$\" \$\"print:%1\$\""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "4" "C:\Program Files\Paint.NET\PaintDotNet.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\My Program\System" "Path" "C:\Program Files\Paint.NET"
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\My Program"

############################### reg2nsis end #################################

Мож и не стоит изобретать велосипед-то ? Reg2Nsis utility мои потребности, например, удовлетворяет.

Serega
05-07-2009, 20:53
Мож и не стоит изобретать велосипед-то ? »
Спасибо, я про неё не знал :) , а в "Полезные ссылки", я и не заглядывал...
Извините, вопрос снят.

onis
21-07-2009, 01:01
Здравствуйте форумчане. Я только начал разбираться с программой дайте ответ на 2 вопроса
1, как запустить установленное приложения после установки.
2, как интегрировать файл реестровый файл когда идет установка
Заранее спасибо

hb860
21-07-2009, 18:44
onis, именно реестровый файл так:
ExecWait "regedit.exe /S $\"$OUTDIR\lines98.reg$\""
А ещё его можно сконвертить в код NSIS, и впихнуть прям в инсталятор. Но лично мне лень, и я часто делаю так, как написал выше, хотя это и "дурной тон"

Чтобы запустить установленное приложение в конце установки, читаем справку:
MUI_FINISHPAGE_RUN exe_file
Application which the user can select to run using a checkbox. You don't need to put quotes around the filename when it contains spaces.

MUI_FINISHPAGE_RUN_TEXT text
Texts to display next to the 'Run program' checkbox.

MUI_FINISHPAGE_RUN_PARAMETERS parameters
Parameters for the application to run. Don't forget to escape double quotes in the value (use $\").

MUI_FINISHPAGE_RUN_NOTCHECKED
Do not check the 'Run program' checkbox by default

MUI_FINISHPAGE_RUN_FUNCTION function
Call a function instead of executing an application (define MUI_FINISHPAGE_RUN without parameters). You can use the function to execute multiple applications or you can change the checkbox name and use it for other things.


Пример можно поглядеть тут: c:\Program Files\NSIS\Examples\makensis.nsi
Вот оттуда код:
!define MUI_FINISHPAGE_LINK "Visit the NSIS site for the latest news, FAQs and support"
!define MUI_FINISHPAGE_LINK_LOCATION "http://nsis.sf.net/"

!define MUI_FINISHPAGE_RUN "$INSTDIR\NSIS.exe"
Помоему, более чем достаточно. Заодно ссылочку воткнете на свой сайт или сайт производителя :)

onis
21-07-2009, 19:13
hb860, Большое спасибо

MDinc
22-07-2009, 19:27
Порадую вас кодом проги Roof Builder
ее сайт www.roof-builder.ru

/*
*/
!define PRODUCT_NAME "Roof Builder"
!define PRODUCT_VERSION "3.00.69.00"
!define PRODUCT_PUBLISHER "MDinc"
!define PRODUCT_WEB_SITE "http://www.roof-builder.ru"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\roof.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_USERRB_ROOT_KEY "HKCU"
!define PRODUCT_RB_KEY "Software\VB and VBA Program Settings\${PRODUCT_NAME}"
!define PRODUCT_RB_DIR "..\..\Roof_Builder_2.85"

VIProductVersion "${PRODUCT_VERSION}"

!define PRODUCT_DAO_DIR_KEY "Microsoft Shared\DAO"
var PRODUCT_DAO_OK

;!define /date MyTIMESTAMP "%Y/%m/%d %H:%M:%S"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
;Name "roof"
OutFile "RBinstall.exe"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""

;!ifdef NSIS_LZMA_COMPRESS_WHOLE
;SetCompressor zlib
;!else
;SetCompressor /SOLID lzma
;!endif

SetCompress Auto
SetCompressor /SOLID lzma
SetCompressorDictSize 32
SetDatablockOptimize on ; - оптимизация блока данных

; MUI 1.67 compatible ------
!include "MUI.nsh"
!define MUI_UI "LA_ui.exe" #файл интерфейса

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange-r-nsis.bmp"
!define MUI_HEADERIMAGE_RIGHT

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

; Welcome page
!define MUI_WELCOMEFINISHPAGE_BITMAP "nsis\Roof-Builder-box_nsis_forma_cad.bmp"
!define MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_PAGE_WELCOME
; License page
;!insertmacro MUI_PAGE_LICENSE "${PRODUCT_RB_DIR}\doc\lic.txt"
!insertmacro MUI_PAGE_COMPONENTS
;!define MUI_COMPONENTSPAGE_SMALLDESC

; Directory page
var SHC_DESCTOP
var SHC_START
var SHC_ASS

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "CheckButtonsState1" #определяем статус кнопок
function CheckButtonsState1
FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R1 1052 #верхняя кнопка
SendMessage $R0 0x00F2 0 0 $R0 #$R0=0 - если не выбрано
StrCpy $SHC_DESCTOP "$R0" #переменная $SHC_DESCTOP используется в инсталляторе для ярлыка на Рабочий стол

FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R1 1053 #средняя кнопка
SendMessage $R0 0x00F2 0 0 $R0
StrCpy $SHC_START "$R0" #переменная $SHC_START используется в инсталляторе для ярлыка в меню Пуск

FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R1 1054 #нижняя кнопка
SendMessage $R0 0x00F2 0 0 $R0
StrCpy $SHC_ASS "$R0" #переменная $SHC_ASS используется в инсталляторе для ассоциаций с файлами
functionend

!define MUI_PAGE_CUSTOMFUNCTION_SHOW "ChangeButtonsCaption1"
function ChangeButtonsCaption1 #подписи к кнопкам
FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R1 1052
SendMessage $R0 0x00F1 1 0 #по умолчанию выбрано
SendMessage $R0 0xC 0 "STR:$(DeskSh)"

FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R1 1053
SendMessage $R0 0x00F1 1 0 #по умолчанию выбрано
SendMessage $R0 0xC 0 "STR:$(StMenuSh)"

FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R1 1054
StrCmp $9 "1" +2 #$9 берется из on.Init при установке поверх эта кнопка будет не выбрана
SendMessage $R0 0x00F1 1 0 #выбрано по умолчанию. Если поверх - то перескакивает - и не выбрано.
SendMessage $R0 0xC 0 "STR:$(AssocFiles)"
functionend

!insertmacro MUI_PAGE_DIRECTORY

; Instfiles page
!insertmacro MUI_PAGE_INSTFILES

; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\roof.exe"
!define MUI_FINISHPAGE_LINK $(Site)
!define MUI_FINISHPAGE_LINK_LOCATION "http://www.roof-builder.ru"
;!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit

!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; MUI end ------

; Language files
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Lithuanian"

VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Roof Builder"
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Roof Builder is a complex decision for the calculation of roof sheets."
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "MDinc"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "MDinc"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© MDinc"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Roof Builder is a complex decision for the calculation of roof sheets."
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${PRODUCT_VERSION}"

ShowInstDetails show
ShowUnInstDetails show

;кнопки на странице с выбором Пути
LangString DeskSh ${LANG_ENGLISH} "Desktop shortcut"
LangString DeskSh ${LANG_RUSSIAN} "Ярлык на Рабочий стол"
LangString DeskSh ${LANG_LITHUANIAN} "Nuoroda i darbalauki"

LangString StMenuSh ${LANG_ENGLISH} "Start Menu shortcut"
LangString StMenuSh ${LANG_RUSSIAN} "Ярлык в меню Пуск"
LangString StMenuSh ${LANG_LITHUANIAN} "Nuoroda i Start meniu"

LangString AssocFiles ${LANG_ENGLISH} "Associate with files"
LangString AssocFiles ${LANG_RUSSIAN} "Ассоциировать файлы .rfd и .rbp с программой"
LangString AssocFiles ${LANG_LITHUANIAN} "Asocijuoti su failais"

;на последней странице инсталлятора название ссылки
LangString Site ${LANG_ENGLISH} "Visit Roof Builder Website - www.roofbuilder.net"
LangString Site ${LANG_RUSSIAN} "Посетить сайт программы - www.roof-builder.ru"
LangString Site ${LANG_LITHUANIAN} "Aplankyti programos tinklapi - www.roofbuilder.net"

;LangString Previous ${LANG_ENGLISH} "Configuration file was found.$\nWarning! Configuration from previous version of ${PRODUCT_NAME} may not be be right for new version.$\nDo you want update file?"
;LangString Previous ${LANG_RUSSIAN} "Найдена предыдущая установка программы.$\nВнимание! Текущая версия программы может не корректно работать со старой конфигурацией.$\nОбновить или пропустить?"
;LangString Previous ${LANG_LITHUANIAN} "Si programos versija jau buvo idegta.$\nDemesio! Instaliuojama programos versija su senu konfiguravimu gali dirbti su klaidom.$\nAtnaujinti ar praleisti?"

LangString UninstSuccess ${LANG_ENGLISH} "$(^Name) was successfully removed from your computer."
LangString UninstSuccess ${LANG_RUSSIAN} "Деинсталяция программы $(^Name) успешна завершена."
LangString UninstSuccess ${LANG_LITHUANIAN} "Programos deinstaliacija $(^Name) sekmingai uzbaigta."

;Удаление
LangString Uninstall ${LANG_ENGLISH} "Remove Roof Builder."
LangString Uninstall ${LANG_RUSSIAN} "Удалить программу."
LangString Uninstall ${LANG_LITHUANIAN} "Pasalinti programa."

LangString UnInit ${LANG_ENGLISH} "Are you sure you want to completely remove $(^Name) and all of its components?"
LangString UnInit ${LANG_RUSSIAN} "Вы действительно хотите удалить $(^Name) и все ее компоненты?"
LangString UnInit ${LANG_LITHUANIAN} "Jus tikrai norite pasalinti $(^Name) visus programos komponentus?"

BrandingText /TRIMRIGHT " ${PRODUCT_NAME} v${PRODUCT_VERSION} "

var SELECT_LNG

Function .onInit

!insertmacro MUI_LANGDLL_DISPLAY
StrCpy $SELECT_LNG 9

;Call CloseRB
;Sleep 100

;Call SysLang
;Pop "$SELECT_LNG" ; Variable (for language name)

; Check to see if already installed
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString"
IfFileExists $R0 +1 NotInstalled
MessageBox MB_YESNO "${PRODUCT_NAME} is apparently already installed. Are you want to unistall it?" /SD IDYES IDNO dontinstall
Exec $R0
Quit
dontinstall:

NotInstalled:

;Banner::show /NOUNLOAD "Checking for DAO..."
;Banner::destroy

StrCpy $PRODUCT_DAO_OK 0

IfFileExists "$COMMONFILES\${PRODUCT_DAO_DIR_KEY}\DAO360.DLL" 0 isdao

StrCpy $R0 "$COMMONFILES\${PRODUCT_DAO_DIR_KEY}\DAO360.DLL"
Push $R0
Call CheckDllVersion
Pop $R0

${If} $R0 >= 3.60
;MessageBox MB_ICONEXCLAMATION "$0 < 3.60"
;Call ConnectInternet ;Make an internet connection (if no connection available)
;StrCpy $2 "$TEMP\MDAC.exe"
;NSISdl::download http://download.microsoft.com/download/c/f/2/cf2b5cd9-7ffd-4c19-971f-9ccaf0b57d48/MDAC_TYP.EXE $2
;Pop $0
;StrCmp $0 success success
;SetDetailsView show
;DetailPrint "download failed: $0"
;Abort
;success:
;SetDetailsView show
;ExecWait '"$2"'
;Delete $2
;Abort
;DetailPrint "DAO360.DLL"
StrCpy "$PRODUCT_DAO_OK" 1
${EndIf}
isdao:
FunctionEnd

; StrCpy $R0 "$COMMONFILES\${PRODUCT_DAO_DIR_KEY}\DAO360.DLL"
; Push $R0
; Call CheckDllVersion
; Pop $R0
;
Function CheckDllVersion
Exch $0
Push $1
GetDllVersion $0 $R1 $R2
IntOp $R3 $R1 / 0x00010000
IntOp $R4 $R1 & 0x0000FFFF
;IntOp $R5 $R2 / 0x00010000
;IntOp $R6 $R2 & 0x0000FFFF
StrCpy $0 $R3.$R4
Pop $1
Exch $0
FunctionEnd

;Function CheckRegKey
;Exch $0
;Push $1
;ReadRegStr $0 HKLM "Software\MyProgram" "SetupPath"
;IfErrors 0 noerror
;DetailPrint "Ключ не существует!"
;Goto EndCheck
;noerror:
;DetailPrint "Ключ существует, значение SetupPath=$0"
;EndCheck:
;FunctionEnd

## Set the hyperlink up.
;Function onGUIInit
; BrandingURL::Set /NOUNLOAD "0" "200" "0" "http://www.roof-builder.ru"
;FunctionEnd

;function RenameFile
; Push $R0
;
; IfFileExists $R0 0 +2
;
; Rename $R0 $R0.
;
; StrCpy $R0 1
; Exch $R0
;functionend

;Function ConnectInternet
;
; Push $R0
;
; ClearErrors
; Dialer::AttemptConnect
; IfErrors noie3
;
; Pop $R0
; StrCmp $R0 "online" connected
; MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet."
; Quit
;
; noie3:
;
; ; IE3 not installed
; MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now."
;
; connected:
;
; Pop $R0
;
;FunctionEnd

;ExecWait '"$INSTDIR\myprog.exe"'
;!include Library.nsh

AutoCloseWindow false
ShowInstDetails show
InstProgressFlags smooth

InstType "Full Install"
InstType "Standart"


Section "!Main" SEC01
SectionIn 1 2 3 RO

SetDateSave on

;
; CHECK PREVIOUS INSTALLATION
;
StrCpy $0 0
loop:
EnumRegKey $1 ${PRODUCT_USERRB_ROOT_KEY} "${PRODUCT_RB_KEY}" $0
StrCmp $1 "" done
IntOp $0 $0 + 1

;StrCmp $1 "REG" miss
;DetailPrint "Delete ${PRODUCT_RB_KEY}\$1"

StrCpy $2 0
loopv:
ClearErrors
EnumRegValue $3 ${PRODUCT_USERRB_ROOT_KEY} "${PRODUCT_RB_KEY}\$1" $2
IfErrors donev
IntOp $2 $2 + 1
;StrCmp $3 "" donev
StrCmp $3 "firminfo" loopv
StrCmp $3 "fimname" loopv
DetailPrint "Delete ${PRODUCT_RB_KEY}\$1\$3"
DeleteRegValue ${PRODUCT_USERRB_ROOT_KEY} "${PRODUCT_RB_KEY}\$1" "$3"
goto loopv
donev:

DetailPrint "Delete ${PRODUCT_RB_KEY}\$1"
DeleteRegKey ${PRODUCT_USERRB_ROOT_KEY} "${PRODUCT_RB_KEY}\$1"
;miss:

goto loop
done:

DeleteRegKey ${PRODUCT_USERRB_ROOT_KEY} "${PRODUCT_RB_KEY}"

;StrCpy $0 0
;EnumRegKey $1 HKLM "Software\${PRODUCT_NAME}" $0
;StrCmp $1 "" done1
;IntOp $0 $0 + 1
;WriteRegStr HKLM "Software\${PRODUCT_NAME}" "" ""
;done1:

AccessControl::GrantOnRegKey HKLM "Software\${PRODUCT_NAME}" "(BU)" "FullAccess"

;
; Main
;
SetOutPath "$INSTDIR"
SetOverwrite ifnewer

IfFileExists "$INSTDIR\roof.exe" 0 +1
Delete "$INSTDIR\roof.exe"
File "${PRODUCT_RB_DIR}\roof.exe"

;
; LNG
;
CreateDirectory "$INSTDIR\lng"
SetOutPath "$INSTDIR\lng"
SetOverwrite on
file "${PRODUCT_RB_DIR}\lng\Russian.lng"

;
; PLUGINS
;
;IfFileExists "$INSTDIR\plugins\CalcList.dll" "" +2
;Rename "$INSTDIR\plugins\CalcList.dll" "$INSTDIR\plugins\CalcList.dll.backup"

;CreateDirectory "$INSTDIR\plugins"
;SetOutPath "$INSTDIR\plugins"
;file "${PRODUCT_RB_DIR}\plugins\CalcList.dll"

;
; MDB
;
;IfFileExists "$INSTDIR\cfg\materials.mdb" IsConfigFile
;UpdateConfigFile:
; Обновление реестра
WriteRegStr ${PRODUCT_USERRB_ROOT_KEY} "${PRODUCT_RB_KEY}\main" "mdbcofigfile" "$INSTDIR\cfg\materials.mdb"
; Удаление файла конфигурации
IfFileExists "$INSTDIR\cfg\materials.mdb" +1
Delete "$INSTDIR\cfg\materials.mdb"
;CreateDirectory "$INSTDIR\cfg"
;SetOutPath "$INSTDIR\cfg"
;file "${PRODUCT_RB_DIR}\cfg\materials.mdb"
;goto UpdateConfigFileSuccess
;IsConfigFile:
;MessageBox MB_YESNO|MB_ICONEXCLAMATION $(Previous) IDYES UpdateConfigFile
;UpdateConfigFileSuccess:

;
; OCX
;
SetOutPath "$INSTDIR"
SetOverwrite on
;ifnewer

file "${PRODUCT_RB_DIR}\ocx\SplitterModern\SplitterModern.ocx"
RegDLL "$INSTDIR\SplitterModern.ocx"
file "${PRODUCT_RB_DIR}\ocx\FrameMinus\FrameHide.ocx"
RegDLL "$INSTDIR\FrameHide.ocx"
file "${PRODUCT_RB_DIR}\ocx\SuperRuler 1.0\acSR.ocx"
RegDLL "$INSTDIR\acSR.ocx"


;
; DAO
;
${If} $PRODUCT_DAO_OK == 0
SetOutPath "$COMMONFILES\${PRODUCT_DAO_DIR_KEY}"
SetOverwrite ifnewer
file "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"
RegDLL "$COMMONFILES\${PRODUCT_DAO_DIR_KEY}\dao360.dll"
${EndIf}

;SetOutPath "$INSTDIR"
;SetOverwrite ifdiff

;
; DLL
;


CreateDirectory "$INSTDIR\data"
AccessControl::GrantOnFile "$INSTDIR\data" "(BU)" "FullAccess"

CreateDirectory "$INSTDIR\tmp"
AccessControl::GrantOnFile "$INSTDIR\tmp" "(BU)" "FullAccess"

SetOverwrite on

;
; DLL
;
file "${PRODUCT_RB_DIR}\rb_loc.dll"

;
; TLB
;

file "${PRODUCT_RB_DIR}\gdi+.tlb"
;
; DLL VB6
;
file "${PRODUCT_RB_DIR}\FileMan.dll"
RegDLL "$INSTDIR\FileMan.dll"
file "h:\PROJECTs\VB6\VB6\SUBCLALSSING\iSubclass dll SelfSub 2.1\SelfSub 2.1\Samples\cSubclass\iSubclass version\iSubclass.dll"
RegDLL "$INSTDIR\iSubclass.dll"


StrCmp $SHC_DESCTOP "0" nodesk
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\roof.exe" "" "" "" "" "" "${PRODUCT_NAME} ${PRODUCT_VERSION}"
nodesk:

StrCmp $SHC_START "0" nostart
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\roof.exe"
nostart:

SectionEnd

Section "Config Base" SEC06
SectionIn 1

CreateDirectory "$INSTDIR\cfg"

AccessControl::GrantOnFile "$INSTDIR\cfg" "(BU)" "FullAccess"

SetOutPath "$INSTDIR\cfg"
SetOverwrite on
file "${PRODUCT_RB_DIR}\cfg\materials.mdb"

SectionEnd

Section "VB6 Libraryes" SEC05
SectionIn 1 2
;VB6
SetOutPath "$SYSDIR"

IfFileExists "$SYSDIR\STDOLE2.TLB" 0 skip_comdlg32
File "C:\windows\SYSTEM32\comdlg32.ocx"
RegDLL "$SYSDIR\comdlg32.ocx"
skip_comdlg32:

IfFileExists "$SYSDIR\STDOLE2.TLB" 0 skip_Msvbvm60
File "C:\windows\SYSTEM32\Msvbvm60.dll"
RegDLL "$SYSDIR\Msvbvm60.dll"
skip_Msvbvm60:

IfFileExists "$SYSDIR\STDOLE2.TLB" 0 skip_MSCOMCTL
File "C:\windows\SYSTEM32\MSCOMCTL.OCX"
RegDLL "$SYSDIR\MSCOMCTL.OCX"
skip_MSCOMCTL:

IfFileExists "$SYSDIR\STDOLE2.TLB" 0 skip_MSCOMCT2
File "C:\windows\SYSTEM32\MSCOMCT2.OCX"
RegDLL "$SYSDIR\MSCOMCT2.OCX"
skip_MSCOMCT2:

IfFileExists "$SYSDIR\STDOLE2.TLB" 0 skip_STDOLE2
File "C:\windows\SYSTEM32\STDOLE2.TLB"
RegDLL "$SYSDIR\STDOLE2.TLB"
skip_STDOLE2:

IfFileExists "$SYSDIR\STDOLE2.TLB" 0 skip_VB6
File "C:\windows\SYSTEM32\VB6.OLB"
skip_VB6:

SectionEnd

SubSection "Language pkg" SecLNG
Section /o "Lithuania pkg" SEC03
SectionIn 1

SetOutPath "$INSTDIR\lng"
SetOverwrite on
file "${PRODUCT_RB_DIR}\lng\Lithuania.lng"

SectionEnd

Section /o "English pkg" SEC04
SectionIn 1

SetOutPath "$INSTDIR\lng"
SetOverwrite on
file "${PRODUCT_RB_DIR}\lng\English.lng"

SectionEnd
SubSectionEnd

Section "-Calculation libraryes" SEC02 # /o ! -
;SectionIn 1

;IfFileExists "$INSTDIR\plugins\CalcListAdvanced.dll" "" +2
;Rename "$INSTDIR\plugins\CalcListAdvanced.dll" "$INSTDIR\plugins\CalcListAdvanced.dll.backup"

SetOutPath "$INSTDIR\plugins"
SetOverwrite on
;file "${PRODUCT_RB_DIR}\plugins\CalcListCProject.dll"
file "${PRODUCT_RB_DIR}\plugins\CalcList.dll"
;RegDLL "$INSTDIR\plugins\CalcList_cp_w.dll"

;SetOutPath "$SYSDIR"
;SetOverwrite on

Delete "$SYSDIR\advcalcdll.dll"

SetOutPath "$INSTDIR"
SetOverwrite on
file "${PRODUCT_RB_DIR}\advcalcdll.dll"

; MS VC
file "H:\PROJECTs\CP\cdll\msvcp71.dll"
file "H:\PROJECTs\CP\cdll\msvcr71.dll"
SectionEnd

;Section /o "Manual" SEC04
; SectionIn 1
; SetOutPath "$INSTDIR"
; file /r "${PRODUCT_RB_DIR}\Doc"
;SectionEnd

LangString DESC_SEC01 ${LANG_RUSSIAN} "Основная програма со всеми настройками."
;LangString DESC_SEC02 ${LANG_RUSSIAN} "Добавочные библиотеки расчета."
LangString DESC_SEC03 ${LANG_RUSSIAN} "Локализационые файлы."
LangString DESC_SecLNG ${LANG_RUSSIAN} "Локализационые файлы."
;LangString DESC_SEC04 ${LANG_RUSSIAN} "Файлы документации."
LangString DESC_SEC05 ${LANG_RUSSIAN} "Основные библиотечные файлы."
LangString DESC_SEC06 ${LANG_RUSSIAN} "Конфигурационный файл."

LangString DESC_SEC01 ${LANG_ENGLISH} "Main program's files"
;LangString DESC_SEC02 ${LANG_ENGLISH} "Calculation`s library's."
LangString DESC_SEC03 ${LANG_ENGLISH} "Main localisation's files."
LangString DESC_SecLNG ${LANG_ENGLISH} "Main localisation's files."
;LangString DESC_SEC04 ${LANG_ENGLISH} "Manual."
LangString DESC_SEC05 ${LANG_ENGLISH} "Main library's files."
LangString DESC_SEC06 ${LANG_ENGLISH} "Main base config file."

LangString DESC_SEC01 ${LANG_LITHUANIAN} "Pagrindine programa su visais nustatymais."
;LangString DESC_SEC02 ${LANG_LITHUANIAN} "Papildomos skaciavimo bibliotekos."
LangString DESC_SEC03 ${LANG_LITHUANIAN} "Lokalizuoti failai."
LangString DESC_SecLNG ${LANG_LITHUANIAN} "Lokalizuoti failai."
;LangString DESC_SEC04 ${LANG_LITHUANIAN} "Dokumentacijos failai."
LangString DESC_SEC05 ${LANG_LITHUANIAN} "Pagrindiniai bibliotekos failai."
LangString DESC_SEC06 ${LANG_LITHUANIAN} "Main base config file."


!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} $(DESC_SEC01)
;!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} $(DESC_SEC02)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(DESC_SEC03)
!insertmacro MUI_DESCRIPTION_TEXT ${SecLNG} $(DESC_SecLNG)
;!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $(DESC_SEC04)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC05} $(DESC_SEC05)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC06} $(DESC_SEC06)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"

StrCmp $SHC_START "0" nostart
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
nostart:
SectionEnd

Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\roof.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\roof.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"

WriteRegStr "${PRODUCT_USERRB_ROOT_KEY}" "${PRODUCT_RB_KEY}\Main" "CurrentLanguage" 25

;Call Build_md5
;Pop $0
;DetailPrint "md5: [$0]"
;Delete "${PRODUCT_RB_DIR}\md5dll.dll"

StrCmp $SHC_ASS "0" noassociation
ExecWait '$INSTDIR\roof.exe /a'
noassociation:

;Поиск ватермарка ROOF BUILDER 2880000000000000000 <> 3ed0f8b8558388fef8e57b9d25eb2e00
;SetDetailsPrint none
;ExecWait '$INSTDIR\Update.exe -f "$INSTDIR\roof.exe" -s "620923383e86370de5db9c98622101c6" -r "$0"'
;SetDetailsPrint both

SectionEnd

;Function Build_md5
# generate MD5sum of file
;md5dll::GetMD5File "$INSTDIR\PM.dll"
;Pop $0
;FunctionEnd

Function un.InitializeUnistall
Push $5
loop:
FindWindow $5 "Roof Builder"
IntCmp $5 0 done
SendMessage $5 16 0 0
Sleep 100
Goto loop
done:
Pop $5
FunctionEnd

Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK $(UninstSuccess)
FunctionEnd

Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
Call un.InitializeUnistall
Sleep 100
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 $(UnInit) IDYES +2
Abort
FunctionEnd

Section Uninstall

SetShellVarContext all

ExecWait "$INSTDIR\roof.exe /una"

;
; OCX
;
UnRegDLL "$INSTDIR\SplitterModern.ocx"
Delete "$INSTDIR\SplitterModern.ocx"
UnRegDLL "$INSTDIR\FrameHide.ocx"
Delete "$INSTDIR\FrameHide.ocx"
UnRegDLL "$INSTDIR\acSR.ocx"
Delete "$INSTDIR\acSR.ocx"

;
; DLL
;
UnRegDLL "$INSTDIR\FileMan.dll"
UnRegDLL "$INSTDIR\iSubclass.dll"

RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
RMDir /r "$INSTDIR\plugins\*.*"
RMDir /r "$INSTDIR\lng\*.*"
RMDir /r "$INSTDIR\tmp\*.*"

Delete "$INSTDIR\roof.exe"
Delete "$INSTDIR\advcalcdll.dll"
Delete "$INSTDIR\msvcp71.dll"
Delete "$INSTDIR\msvcr71.dll"
Delete "$INSTDIR\FileMan.dll"
Delete "$INSTDIR\iSubclass.dll"
Delete "$INSTDIR\rb_loc.dll"
Delete "$INSTDIR\uninst.exe"

;
; TLB
;
Delete "$INSTDIR\gdi+.tlb"
;Delete "$INSTDIR\Roof Builder"


;DeleteRegKey HKLM "Software\${PRODUCT_NAME}"

Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd

hb860
04-08-2009, 20:28
Для Комсомольца, и всех остальных, кому интересно. Диск, на котором установлена винда, я определяю так:
Var SysDrive
Function .onInit
StrCpy $SysDrive $WINDIR 2
StrCpy $INSTDIR "$SysDrive\totalcmd"
FunctionEnd

Знаете способ лучше ? Напишите

nRoof
21-08-2009, 02:35
Доброго времени суток всем! Сделал инсталлятор на NSIS. Ставит несколько программ и создает/меняет некоторые ключи реестра.

Под ХР работает, а под вистой и семеркой не хочет ни в какую писать ключи реестра в раздел HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\ (контекстное меню Мой компьютера). Туда удобно ставить ссылки на некоторые программы, чтоб не мешались и одновременно были под рукой в нужный момент.

Пробовал RequestExecutionLevel admin и highest, одновременно с указанием SetShellVarContext all в секциях установщика и анинсталла. Не помогает, независимо от способа запуска - ни просто так, ни от имени админа. Все файлы и остальные ключи записываются нормально, только в указанный раздел ничего не добавляется.

Зато, если создать reg-файл с этими ключами и запускать его вручную после установки, то все добавляется. Но такой способ мне совсем не нравится. С таким же успехом можно обойтись и без установщика, копируя файлы вручную :-\

Помогите советом, как заставить мой инсталлятор правильно работать?

hb860
21-08-2009, 08:29
nRoof, давай код скрипта поглядим. Хотя бы ту часть которая пишет в реестр.

nRoof
21-08-2009, 16:35
Разобрался сегодня сам. Проблема была совсем не в правах доступа.

Моя ошибка была в том, что я не учел разрядность висты и 7, они у меня 64-битные. А у Windows x64 систем реестр делится на 64 и 32-разрядные разделы. Мониторинг процесса установки моего инсталлера ProcessMonitor'ом показал, что ключи все-таки добавляются, но не в HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\, а в HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell. Стало очевидно, что инсталлер обращается к 32-разрядным разделам вместо 64-разрядных.

Поиск в справке NSIS привел к инструкции SetRegView 32|64|lastused, которая и определяет, к какой разрядности разделам обращаться установщику. Добавление в скрипт SetRegView 64 решило проблему.

Теперь под XP-32 и под Vista-64/7-64 собранный мной установщик работает правильно :) . Буду рад если этот пост кому-то поможет.

Impeck
24-08-2009, 20:43
Подскажите, как nsis'ом определить расположение ранее установленной программы.
Занести пусть в переменную и использовать ее при конфигурировании.
Например:
Определяем куда установлен µTorrent
Определили что он установлен в C:\Program Files\uTorrent\ занесли это в переменную $instor
и потом
WriteINIStr $TEMP\something.ini section1 something $instor\utorrent.exe
возможно такое?

Habetdin
24-08-2009, 23:18
Impeck, из справки NSIS:
4.9.3.11 SearchPath
user_var(output) filename
Assign to the user variable $x, the full path of the file named by the second parameter. The error flag will be set and $x will be empty if the file cannot be found. Uses SearchPath() to search the system paths for the file.

Impeck
25-08-2009, 09:13
нашел пример использования

SearchPath $1 notepad.exe
MessageBox MB_OK "notepad.exe=$1"

путь определяет.

но если ставить например
SearchPath $1 firefox.exe
MessageBox MB_OK "firefox.exe=$1"
путь пустой.

MDinc
25-08-2009, 14:07
тогда уж так

The DeleteRegKey problem is probably a windows bug and not nsis, either way, using SetRegView 64 on 32 bit systems is not supported

To detect x64, include x64.nsh

${If} ${RunningX64}
MessageBox MB_OK "running on x64"
${EndIf}

edit: gah too slow, kichik beat me to it

hb860
25-08-2009, 14:59
Ребят, вы чёт загнались тут конкретно!
Короче, умейте читать справку! Uses SearchPath() to search the system paths for the file.
СИСТЕМНЫЕ ПУТИ!!! системные пути это %windir%, %path% etc.
Я вообще не понял суть вопроса с поиском. Если функция нужна - используйте это:
http://nsis.sourceforge.net/Search_For_a_File
ИЛИ ЭТО
http://nsis.sourceforge.net/FindIt:_Simple_search_for_file_/_directory
Если надо ПРОСТО УЗНАТЬ, установлен юторрент установлен или нет, то прочитайте ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uTorrent, ключ "UninstallString"="\"C:\\Program Files\\uTorrent\\uTorrent.exe\" /UNINSTALL"
или этот "InstallLocation"="C:\\Program Files\\uTorrent" (я рекомендую читать первый)
и проверьте наличия файла

P.S. А ещё можно в аппдата поглядеть, есть ли профиль юторрента. Если есть - значит он он есть(ну или был когда то 100%)

MDinc
25-08-2009, 16:33
ну если это ко мне адресовано то я ответил на пост 173 nRoof




© OSzone.net 2001-2012