【问题标题】:Running a DOS command from InstallShield fails从 InstallShield 运行 DOS 命令失败
【发布时间】:2018-02-24 18:42:57
【问题描述】:

我在我的 Install Shield 脚本中创建了一个 DOS 命令调用 C:\Windows\System32\PnPutil.exe -a "C:\Program Files (x86)\Anite\Drivers\SPS\ftdiport.inf"

在 Windows 64 位 PC 上运行我的 InstallShield 程序时(双击 Setup.exe 文件)此命令总是给出返回码 2(系统找不到指定的文件。表示在指定的文件中找不到文件地点)。但是,当我在同一台 PC 上打开 CMD 窗口(以管理员身份)并从与 setup.exe 文件相同的位置运行完全相同的 DOS 命令时,它总是可以工作。我知道当我们的 InstallShield 脚本运行时,它是在提升模式下执行的,因此从 InstallShiled 发出此命令应该与在管理员模式下从 CMD 运行它相同。然而,它在第一种情况下失败,但在第二种情况下成功。

另请注意,当我在 Windows 32 位 PC 上运行相同的 InstallShield 程序时,该命令始终有效 C:\Windows\System32\PnPutil.exe -a "C:\Program Files\Anite\Drivers\SPS\ftdiport.inf"

在 Win 64 位操作系统上从 InstallShield 脚本运行此 DOS 命令似乎存在问题,因为它无法在 Program Files (x86) 区域中找到该文件。此外,此问题似乎仅在调用 pnputil 实用程序时发生 - 所有其他实用程序(例如 regsvr32.exe)都被调用而没有任何问题。

我们将不胜感激任何建议或帮助。非常感谢。

【问题讨论】:

  • 您打开的是 32 位还是 64 位命令提示符,您的代码是什么? InstallScript 始终作为 32 位代码运行,因此 32 位命令提示符将是最好的并行。

标签: installshield


【解决方案1】:

我找到了解决此问题的方法。我发现,当您使用 32 位 Install Shield 程序构建映像时,它有一个设置 (WOW64FSREDIRECTION) 会自动将所有 64 位应用程序和系统调用重定向到C:\Windows\SysWOW64 目录,因此在这种情况下,这会导致 pnputil 命令调用失败,因为它不在该目录中(因此错误代码“系统找不到指定的文件”)而是在 system32 目录中。我使用了 installshield 例程“Disable (WOW64FSREDIRECTION)”,它覆盖了这个属性,这解决了问题——命令从 system32 目录成功执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2011-12-22
    • 2019-05-28
    • 2012-05-02
    相关资源
    最近更新 更多