我的Inno安装脚本中有以下代码:
[Files]
Source: "C:\Users\Myname\Documents\Visual Studio
2010\Redistributional\vcredist_x86.exe"; DestDir: "{tmp}"; Flags:
deleteafterinstall;
Source: "C:\Users\Myname\Documents\Visual Studio
2010\Redistributional\vcredist_x64.exe"; DestDir: "{tmp}"; Flags:
deleteafterinstall;
[Run]
Filename: "{tmp}\vcredist_x86.exe"; Parameters: "/install /passive"; Check:
not IsWin64 and not VCinstalled32
Filename: "{tmp}\vcredist_x64.exe"; Parameters: "/install /passive"; Check:
IsWin64 and not VCinstalled64
Filename: "{app}\Myprogram.exe"; Description {cm:LaunchProgram,Myprogram}";
[Code]
function VCinstalled32: Boolean;
var
installed: Cardinal;
key: String;
begin
Result := False;
key := 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x86';
if DirExists
('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x86')
then begin
if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Installed', installed)
then begin
if installed = 1 then begin
Result := True;
end;
end;
end;
end;
function VCinstalled64: Boolean;
var
installed: Cardinal;
key: String;
begin
Result := False;
key := 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x64';
if DirExists
('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x64')
then begin
if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Installed', installed)
then begin
if installed = 1 then begin
Result := True;
end;
end;
end;
end;
我尝试在64位Windows 10计算机上运行此操作,其中目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x64
不存在,但我收到一条错误消息,指出未找到MSVCR100。
提前致谢。
非常感谢您的回答,但我仍然收到相同的错误消息。也许我忽略了一些东西。
我不太熟悉Inno脚本,也不知道如何记录结果。我试图谷歌后者,但它似乎非常复杂,所以如果我无法以其他任何方式找到答案,我会试着稍后再等。
以下是日志文件的一些输出:
2018-03-05 14:01:03.567 -- File entry --
2018-03-05 14:01:03.568 Dest filename: C:\Users\Bruker\AppData\Local\Temp\is-SP07M.tmp\vcredist_x86.exe
2018-03-05 14:01:03.568 Time stamp of our file: 2018-02-18 14:27:32.000
2018-03-05 14:01:03.568 Installing the file.
2018-03-05 14:01:04.016 Successfully installed the file.
2018-03-05 14:01:04.017 -- File entry --
2018-03-05 14:01:04.018 Dest filename: C:\Users\Bruker\AppData\Local\Temp\is-SP07M.tmp\vcredist_x64.exe
2018-03-05 14:01:04.018 Time stamp of our file: 2018-02-18 16:00:00.000
2018-03-05 14:01:04.018 Installing the file.
2018-03-05 14:01:04.937 Successfully installed the file.
2018-03-05 14:01:08.883 -- Run entry --
2018-03-05 14:01:08.883 Run as: Current user
2018-03-05 14:01:08.883 Type: Exec
2018-03-05 14:01:08.883 Filename: C:\Users\Bruker\AppData\Local\Temp\is-SP07M.tmp\vcredist_x64.exe
2018-03-05 14:01:08.883 Parameters: /install /passive
2018-03-05 14:01:21.800 Process exit code: 0
2018-03-05 14:01:21.800 -- Run entry --
2018-03-05 14:01:21.800 Run as: Current user
2018-03-05 14:01:21.800 Type: Exec
2018-03-05 14:01:21.800 Filename: C:\Program Files (x86)\Myfile\myfile.exe
2018-03-05 14:01:28.020 Process exit code: 3221225781
2018-03-05 14:01:28.023 Need to restart Windows? No
2018-03-05 14:01:30.504 Deinitializing Setup.
2018-03-05 14:01:30.593 Log closed.
据我了解,Process exit code: 0
表示该文件已成功执行,因此我仍然不了解可能出现的问题。
答案 0 :(得分:2)
我刚读了 MSVCR100.DLL :
MSVCR100.dll = Visual Studio 2010 Runtime
MSVCR110.dll = Visual Studio 2012 Runtime
MSVCR120.dll = Visual Studio 2013 Runtime
您实际安装了正确的可再发行组件吗?
尊重您的脚本,为什么使用DirExists
?这旨在验证directory是否存在。您正在使用registry,因此您应该使用RegKeyExists
。帮助提供了一个例子:
begin
if RegKeyExists(HKEY_CURRENT_USER, 'Software\Jordan Russell\Inno Setup') then
begin
// The key exists
end;
end;
我没有对此进行过测试,但你需要这样的东西:
function VCinstalled64: Boolean;
var
installed: Cardinal;
key: String;
begin
Result := False;
key := 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x64';
if RegKeyExists(HKEY_LOCAL_MACHINE, key) then
begin
if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Installed', installed)
then begin
if installed = 1 then begin
Result := True;
end;
end;
end;
end;
另一种方法VCinstalled32
需要进行类似的更改。
Inno Setup(也在线)提供的帮助系统解释了logging:
<强> / LOG 强> 安装程序在用户的TEMP目录中创建日志文件,详细说明安装过程中执行的文件安装和[运行]操作。这可以是一个有用的调试辅助工具。例如,如果您怀疑某个文件在您认为应该被替换时没有被替换(反之亦然),则日志文件将告诉您文件是否真的被跳过,以及原因。
使用基于当前日期的唯一名称创建日志文件。 (它不会覆盖或附加到现有文件。)
日志文件中包含的信息本质上是技术性的,因此最终用户无法理解。它也不是可机器分析的;文件的格式如有更改,恕不另行通知。
<强> / LOG = “文件名”强> 与/ LOG相同,但它允许您指定用于日志文件的固定路径/文件名。如果已存在具有指定名称的文件,则将覆盖该文件。如果无法创建文件,安装程序将中止并显示错误消息。
cmd
框,然后点击命令提示符:/log
参数运行它:编辑您的问题并将日志中的输出添加到其中。另外,请考虑使用完整脚本(使用DirExists
的原始脚本替换脚本片段。
我做了一些研究,发现这个有趣question。如果查看日志输出,它只会安装64位版本:
2018-03-05 14:01:08.883 -- Run entry --
2018-03-05 14:01:08.883 Run as: Current user
2018-03-05 14:01:08.883 Type: Exec
2018-03-05 14:01:08.883 Filename: C:\Users\Bruker\AppData\Local\Temp\is-SP07M.tmp\vcredist_x64.exe
2018-03-05 14:01:08.883 Parameters: /install /passive
2018-03-05 14:01:21.800 Process exit code: 0
从以下位置更改此行:
Filename: "{tmp}\vcredist_x86.exe"; Parameters: "/install /passive"; Check: not IsWin64 and not VCinstalled32
为:
Filename: "{tmp}\vcredist_x86.exe"; Parameters: "/install /passive"; Check: not VCinstalled32
你的可执行文件似乎是32位,根据我提到的那个问题:
不,您需要x86版本才能运行32位VC ++程序,并且您需要x64版本才能运行64位VC ++程序。