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 引用文件