0

我使用 Installshield 5.0 来创建我的应用程序的设置。我的应用程序需要Microsoft Visual C++ 2005 redistributable安装在目标计算机上。所以我从 mys installshieldseteup.rul脚本启动 vcredist_x86.exe 如下:
sVCREdistprog= sPackSetupDir ^ "\\SetupPack\\vcredist_x86.exe"; if (LaunchAppAndWait (sVCREdistprog, "/q:a", WAIT) < 0) then MessageBox ("Unable to launch: "+ sVCREdistprog+".",WARNING);

这几乎可以正常工作。但有时它会失败(在 WIN7 64 PC 上)。谁能告诉我为什么它失败了,我该如何解决这个问题?

4

2 回答 2

0

p我们还在所有目标计算机上安装 vcredist_x86.exe 2005,不是可再分发的,而是像您一样从脚本安装。此代码适用于所有 Windows 操作系统。我们在 1000 多个客户上从来没有遇到过这个问题。我们从 InstallShield 6.0 到 InstallShield 2014 一直使用这个脚本。

我们将 vcredist_x86.exe 放在 Support Files\Language Independent 中。在安装程序执行时,此文件将可从 SUPPORTDIR 获得。

    sParams = "/q";
    log("  LaunchAppAndWait: " + SUPPORTDIR ^ "vcredist_x86.exe " + sParams);
    nResult = LaunchAppAndWait(SUPPORTDIR ^ "vcredist_x86.exe", sParams, LAAW_OPTION_HIDDEN | LAAW_OPTION_WAIT | LAAW_OPTION_SHOW_HOURGLASS);
    if (nResult < 0) then
        sErrorMessage = FormatMessage(nResult);
        log("**ERROR: Could not start vcredist_x86.exe. Reason: " + sErrorMessage);
    endif;

我们有自定义 log() 函数。只需忽略对 log() 的调用或将它们更改为 MessageBox 或其他东西。

如果常量不可用:

#define LAAW_OPTION_NOWAIT 0x00000000
#define LAAW_OPTION_WAIT 0x00000001
#define LAAW_OPTION_HIDDEN 0x00000002
#define LAAW_OPTION_MINIMIZED 0x00000004
#define LAAW_OPTION_MAXIMIZED 0x00000008
#define LAAW_OPTION_SET_BATCH_INSTALL 0x00000010
#define LAAW_OPTION_SHOW_HOURGLASS 0x00000020
#define LAAW_OPTION_NO_CHANGEDIRECTORY 0x00000040
于 2014-12-05T10:14:24.203 回答
0

运行安装包时创建一些日志文件。如果您无法将参数添加到 exe 以创建日志文件,或者您不知道它们...您可以获取 vcruntime 的 msi,它包含在 VCRuntime.exe 中。

这样做:启动 exe,当你得到第一个对话框时,转到 %TEMP% 并获取 vcruntime 的“GUID”文件夹。在此文件夹中,vcruntime msi 驻留。将此复制到另一个位置,因为当您停止当前正在运行的 vcruntime 安装程序时,它将再次被删除。

如果你有这个 msi,你可以在有问题的系统上创建一个日志文件,看看出了什么问题。记录是知道的!

键入 msiexec.exe /?有关 msi 参数的更多信息。

于 2015-02-20T14:02:12.100 回答