iexpress 在扩展到 temp 时不维护文件夹结构 [重复]

Posted

技术标签:

【中文标题】iexpress 在扩展到 temp 时不维护文件夹结构 [重复]【英文标题】:iexpress doesn't maintain folder structure when expanding to temp [duplicate] 【发布时间】:2015-07-08 17:42:22 【问题描述】:

环境:Windows 7 64、Visual Studio 2013

在运行 iexpress 之前,我有一个引用主 msi 和先决条件 msi (SlimDX) 的设置文件。当 Visual Studio 安装程序添加先决条件时,它会将 prereq msi 添加到 setup.exe 旁边的子文件夹中。

现在我正在使用 iexpress.exe 来合并 setup.exe 和 2 个 msi 文件。当 iexpress 将这 3 个文件提取到临时文件夹时,可再发行组件不在子文件夹中,尽管安装文件仍期望它在子文件夹中。

如何强制 iexpress 在提取时保持文件夹结构?或者,在向 Visual Studio 安装程序添加先决条件时,如何强制它将依赖项放置在与 setup.exe 相同的文件夹级别?

SDE 文件

[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=0
HideExtractAnimation=0
UseLongFileName=1
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=I
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
TargetName=C:\Jobs\NME\Installer\Release\NMEInstaller.EXE
FriendlyName=NME Installer
AppLaunched=setup.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="NME Installer.msi"
FILE1="setup.exe"
FILE2="SlimDXRedistributable\SlimDX Runtime .NET 4.0 x64 (January 2012).msi"
[SourceFiles]
SourceFiles0=C:\Jobs\NME\Installer\Release\
SourceFiles1=C:\Jobs\NME\Installer\Release\SlimDXRedistributable\
[SourceFiles0]
%FILE0%=
%FILE1%=
[SourceFiles1]
%FILE2%=

【问题讨论】:

【参考方案1】:

我的理解是,MSFT 不再推荐或支持使用 IEXpress.exe,因为它包含许多从未修补过的安全漏洞。您确实应该考虑切换到适当的引导程序,例如 Windows Installer XML 的刻录功能。它更易于实施且功能更强大。

【讨论】:

虽然我一点也不反对,但你有这方面的参考吗? seclists.org/fulldisclosure/2013/Oct/5 windows-installer-xml-wix-toolset.687559.n2.nabble.com/… 这并不是一个真正的漏洞——你链接的那个甚至没有被微软接受。它涉及 2003/XP 的 IExpress 版本,而不是最近的版本。 (不过,我再次强调,我并不反对您使用其他东西的建议。) 顺便说一句,如果您不知道,IExpress 使用CreateProcess,它在查看%path% 之前从System32 读取cmd.exe。除非您以某种方式认为您可以准确预测用户从哪个目录运行安装包,否则实际上无法注入不同的cmd.exe。 (你怎么能把它弄到那里呢?)【参考方案2】:

我之前回答过一个类似的问题:

How to create an installer of a browser-based system?

本质上,您想在执行实际的setup.exe 之前使用批处理文件(或其他东西)将文件复制或移动到您需要它们的位置,例如:

@echo off
mkdir SlimDXRedistributable
move /y "SlimDX Runtime .NET 4.0 x64 (January 2012).msi" SlimDXRedistributable
setup.exe

请记住,如果您使用批处理文件来调用它:

cmd /c myscript.bat

(如果你只是放批处理文件,它将通过旧的command.com 运行,这是次优的。)

【讨论】:

您应该投票关闭或标记为重复重新回答问题

以上是关于iexpress 在扩展到 temp 时不维护文件夹结构 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iexpress 创建的 exe 中反编译 [vb] 脚本

iexpress 提取文件,然后从 exe 中运行 vbs 引用文件

安装所有文件后如何运行批处理文件(IExpress)

Iexpress:pygame.error:文件不是 Windows BMP 文件

IExpress 2 和 bat 文件路径

打包为 IExpress 可执行文件的批处理文件无法正常运行