【问题标题】:Expand an x86 .exe to 'C:\Windows\System32' under both Windows x86 and x64?在 Windows x86 和 x64 下将 x86 .exe 扩展为“C:\Windows\System32”?
【发布时间】:2014-11-24 16:35:11
【问题描述】:

我想让我的安装程序在两个 x86/x64 窗口下兼容,这意味着便携。

我做了 innosetup 安装程序只是为了扩展一个 x86 CLI 可执行文件,我需要将它扩展为 C:\windows\system32 目录,即使安装程序在 Windows x64 下运行,否则如果我将其展开到 C:\Windows\Syswow64 目录,则在 Windows x64 下无法识别 exe CMD

那么我应该如何设置这个属性以使其在上述指定条件下可移植?:

ArchitecturesInstallIn64BitMode= ???

在此处展开​​文件时我应该使用哪些标志?:

Source: {sys}\My_x86_application.exe; DestDir: {sys}; Flags: ??? 

我已经使用了一些标志,例如 32Bit64BitIs64BitInstallMode,但我无法得到预期的结果,因为如果我知道 {syswow64} 的受限常量会引发安装Windows x86 下的错误...

更新

这是我的安装脚本的相关部分,但是错了,应该兼容x86和x64 windows(便携),只将Source: {sys}\*文件展开到C:\Windows\System32 在两个窗口下(当然使用常量{sys} 来检测目录路径)。

[Setup]
DefaultDirName={pf32}\{#AppName}
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

[Files]
Source: {app}\*; DestDir: {app}; Flags: ignoreversion
Source: {sys}\*; DestDir: {sys}; Flags: ignoreversion 64bit

【问题讨论】:

  • 但是...为什么我收到两个反对票?,我认为我的问题结构良好,并且提供了帮助者所需的所有信息。无缘无故的讨厌……
  • 您确定要将 32 位应用程序安装到 64 位系统文件夹中吗?我看到 64 位命令提示符看不到它,但这就是 32 位命令提示符的用途。 [也不要投反对票; ++]
  • 是的@TLama 我完全确定我想做什么,因为有两个原因:1)如你所知 System32SysWow64 例如 Program Files(x86)Program Files 是目录正确安装和区分同一应用程序的不同架构,但由于我的应用程序只有 x86(我没有与 x64 相同的应用程序)我不能在System32 目录中安装它时遇到任何冲突,那么我应该不用担心我选择安装我的 exe 的两个目录的位置,但问题来了 2)
  • 2) CMD 无法识别 exe 如果我将它安装到Syswow64 中(我的PATH 环境变量是正确的默认值),我只需要将它安装在@987654337 中@ dir。感谢您的评论,对不起我的英语。
  • syswow64 中有很多 32 位的可执行文件,它们都可以工作。

标签: windows installation system inno-setup


【解决方案1】:

像你的问题一样回答:

  1. ArchitecturesInstallIn64BitMode

    有效值:以下一项或多项,以空格分隔:

    • x64
    • ia64

默认值:(空白)

说明:指定安装程序应在 64 位模式下安装的 64 位处理器体系结构。如果此指令未指定或为空,安装程序将始终以 32 位模式安装。 通常,除非您的应用程序包含本机 64 位二进制文​​件,否则您不应更改此指令的默认值。

您有一个 x86 exe 二进制文件,因此请将该字段留空空白

  1. Source (必填)

说明:源文件的名称。 如果您未指定完全限定的路径名​​,编译器将在您的安装源目录的路径前添加。

例子:

Source: "My_x86_application.EXE"

不使用上述条目那样的任何路径可能是最佳选择(对于小型项目,因为它会混淆要使用安装脚本部署的文件)。另外,请注意常量只能在 external 标志被指定的情况下使用,因为编译器本身不做任何常量翻译。 所以,下面的条目:

Source: {sys}\My_x86_application.exe; DestDir: {sys}

实际上希望将二进制文件存储在安装脚本所在目录的{sys} 子文件夹中。如果不是这样,编译将失败。

  1. DestDir (必填)

我认为您可以始终使用 {win}\System32 指定 System32。由于 x86x64 版本的 Windows 都包含 System32 目录。

  1. 如需Flags 和进一步的疑问澄清,请访问this 页面。

编辑:将 iss 文件保存在 x86 exe 二进制文件所在的同一文件夹中。然后运行它。

【讨论】:

  • @ElektroStudios 您是否尝试过运行安装程序?无论如何都要保留默认标志。因为它是 DestDir 你有问题。
  • @Tlama 正如您在之前的评论中看到的那样,如果 ElectroStudios 一开始就知道所有关于标志的信息,那么除了描述之外就没有什么了。我还发布了对从文档本身推断出的特定问题的答案。最后,要求用户尝试解决方案是错误的吗?
  • @Tlama 安装程序假定运行它的路径。因此,最好不要在问题中指定诸如 {sys} 之类的常量。
  • @Tlama 以便安装文件在%SystemRoot%\System32 以外的文件夹中编译。 (我不知道 exe 源在哪里,所以我认为它会在 System32 以外的某个地方)。运行是指在编译时运行(编译器运行脚本)。执行 Inno Setup 编译器找出来。我认为 ElektroStudios 会很清楚。
  • @Tlama,您的第一个问题是我首先阻止 ElektroStudios 在Source 中使用{sys} 的原因(请参阅问题)。第二个是 ElektroStudios 期望的输出。但是,DestDir 是在编译安装程序的运行时创建的,所以问题是关于编译时和运行时。
猜你喜欢
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多