【发布时间】:2015-10-16 11:47:35
【问题描述】:
procedure InstallNetTime(); Forward;
procedure CreateNTPRegistryEntries(); Forward;
procedure InstallNetTime();
begin
if RegKeyExists(HKEY_LOCAL_MACHINE_32,'SOFTWARE\MICROSOFT\Windows\CurrentVersion\Uninstall\NetTime_is1') then
begin
exit;
end;
ShowStatusMessage('Installing NetTime...');
CreateNTPRegistryEntries();
ExtractTemporaryFile('NetTime-2b7.exe');
RunProcess('{tmp}\NetTime-2b7.exe', '');
end;
procedure CreateNTPRegistryEntries();
begin
RegDeleteKeyIncludingSubkeys ( HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective Software\NetTime');
RegWriteStringValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'Hostname', '127.0.0.1');
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'Protocol', 2);
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'Port', 37);
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'SyncFreq', 600);
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'LostSync', 7500);
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'WarnAdj', 120);
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'Retry', 600);
RegWriteDWordValue(HKEY_LOCAL_MACHINE_32, 'SOFTWARE\Subjective
Software\NetTime', 'Server', 1);
end;
我必须进行静默安装,这就是我使用 inno 脚本的原因。
我正在使用 ini 文件获取额外信息,并调用 RunProcess() 方法将此 ini 文件作为参数传递。首先,我提取 setup 和 ini 文件,然后调用 Runprocess() 方法,如下所示:
ExtractTemporaryFile('ntp-setup-win32.exe');
ExtractTemporaryFile('MeinBergNTP.ini');
RunProcess('msiexec', AddQuotes(ExpandConstant('{tmp}\ntp-setup-win32.exe'))
+ AddQuotes(ExpandConstant('{tmp}\MeinBergNTP.ini'))
+ ' /quiet /norestart');
第二行和第三行正在执行,因为我可以在注册表中看到设置条目。但是RunProcess() 方法在这里不起作用。安装程序只是跳过这一步。我不太清楚如何将参数和 exe 文件一起传递,因为我是 Inno Scripts 的新手,并且在上面找不到足够的文档。请帮我看看我应该如何使用RunProcess() 方法。或者如何使用RunProcess() 方法进行静默安装。
【问题讨论】:
-
Inno Setup 中没有
RunProcess函数。如果是你自定义的函数,我们需要查看它的代码来帮助你。 -
无论如何,你为什么使用
msiexec来运行.exe文件?msiexec用于运行.msi文件。你应该直接运行.exe。 -
这是我用于使用 RunProcess() 方法安装 exe 设置的代码,它在没有任何参数的情况下工作正常。它不是用户定义的。我检查了所有相关的 iss 文件,它们都使用 RunProcess() 或 RunProcessHidden() 类型的函数,这些不是用户定义的。我需要调用 RunProcess() 将 ini 文件作为参数传递。
-
不,IS 中没有
RunProcess函数。它必须是用户定义的。此外,您的新代码RunProcess调用与您发布的第一个代码不同。投票结束您的问题不清楚。
标签: inno-setup ini pascalscript