我想要静默安装MSI文件.
/ qn和/ quiet作为msiexec.exe的参数有什么区别?
正如大多数人可能注意到的那样,当卸载MSI软件包时,Windows将要求提供原始.msi
文件.这是为什么?
我只能看到它的缺点:
有人可以对此有所了解吗?
我们使用MSIEXEC使用以下命令行选项安装应用程序(MSI):
MsiExec.exe /x{code} /qn /liwearucmopvx+ C:\Log\UnInstall.tra
MsiExec.exe /iC:\Source\App.msi /qn TARGETDIR=C:\Install ALLUSERS=1 /liwearucmopvx+ %C:\Log\Install.tra
Run Code Online (Sandbox Code Playgroud)
大多数情况下这是有效的,但有时卸载失败(不确定为什么,查看错误).无论如何,当发生这种情况时,我在重新安装期间遇到以下错误:
Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel
Run Code Online (Sandbox Code Playgroud)
有没有办法绕过这个?这意味着确保我们始终重新安装(如果存在,我们可以简单地自动将其吹走?)
使用以下命令提取msi时出现2203错误.
msiexec/a"C:\ Test\Installer.msi"/ QB targetDIR ="C:\ Test\Eval"/ LV*"C:\ Test\INST_Logfile.log"
在回答时请考虑以下几点:
登录用户和SYSTEM帐户对
%TEMP%,C:\ Windows\Installer 具有完全访问权限.
msi未标记为ReadOnly.
检查Windows安装程序服务,它运行正常.
尝试取消注册并注册msiexec
MSIEXEC /UNREGISTER
MSIEXEC /REGSERVER
Run Code Online (Sandbox Code Playgroud)重启系统
以下是日志中捕获的错误:
MSI (s) (88:A4) [14:09:27:551]: Executing op: DatabaseCopy(DatabasePath=C:\Test\Installer.msi,,CabinetStreams=cab1.cab,AdminDestFolder=C:\Test\,)
MSI (s) (88:A4) [14:09:27:551]: Note: 1: 2203 2: C:\Test\Installer.msi 3: -2147287008
DEBUG: Error 2203: Database: C:\Test\Installer.msi. Cannot open database file. System error -2147287008
MSI (s) (88:A4) [14:09:34:634]: Product: Installer -- The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error …
我们的产品有一个MSI安装程序(用WiX编写),基本上将一些文件复制到文件夹c:\ ourproduct中,并安装一个Windows服务"ourwindowsservice".
我们希望添加对该服务的多个实例的支持,并且应该可以彼此独立地安装/卸载它们.与SQL Server类似,每个实例都应该有一个名称,可以作为命令行参数传递给MSI.
示例:实例"A"=>将文件复制到"c:\ ourproductA",将服务安装为"ourwindowsserviceA"实例"B"=>将文件复制到"c:\ ourproductB",将服务安装为"ourwindowsserviceB"...
任何的想法?
实例转换似乎需要一组预定义和预先命名的实例.
谢谢
如何从msi包中提取ProductCode?我想以后用它作为描述通过MSIEXEC卸载MSI 这里
我们使用Jenkins进行CI.
我有一个使用CMake 2.8.4和VS2010(NMake Makefiles)在Windows中构建的项目.一旦构建完成,我们手动压缩文物以给人们.如果可能的话,我想通过Jenkins创建一个安装包,而不是必须压缩所有内容.
有没有人知道可以完全使用命令行的安装程序,所以我可以将命令放在Jenkins的"执行批处理命令"窗口中?有没有人这样做过?您使用的安装程序创建者是什么?希望在免费/开源领域寻找一些东西.
我需要MSIEXEC
从PowerShell 运行命令行并检查安装是否成功.
如果我做:
msiexec.exe /qn /l*v e:/tmp/surfaceruntime.log /i '\\nas\lui\tools\surfaceruntime2.msi'
Run Code Online (Sandbox Code Playgroud)
(指定的MSI不存在 - 用于测试目的)
我得到$LASTEXITCODE
1分
OTOH,如果我这样做:
$parms=@("/qn", "/l*v", "e:/tmp/surfaceruntime.log";"/i";"\\nas\lui\tools\surfaceruntime2.msi")
$run=[System.Diagnostics.Process]::Start("msiexec",$parms)
$run.WaitForExit()
$run.ExitCode
Run Code Online (Sandbox Code Playgroud)
我得到1619(就像%ERRORLEVEL%
我从命令行运行一样CMD
).
怎么回事$LASTEXITCODE
不对?
如何对两个(或更多)MSI文件进行 " 内容比较 " 并查看文件内部实际不同的内容 - 而不是进行无用的二进制比较?(这显然只告诉我我是否正在处理同一文件的副本).
一些相关和典型的问题场景:
这是一个Q/A风格的问题,主题是比较已编译的MSI文件以确定存在哪些真正的"内容差异".
我正在尝试使用包含空格的值在installshield安装程序中设置公共属性.在运行MSI安装程序时,我在PowerShell命令提示符下使用以下命令.由于该值包含空格,因此我使用双引号来传递值
msiexec -i "myinstaller.msi" MYDIRPATH="C:\new folder\data.txt"
Run Code Online (Sandbox Code Playgroud)
它打破了命令,因为参数值C:\new folder\data.txt
在字符串中有一个空格,new folder
并导致msiexec的错误提示下面,这表明传递给msiexec命令的参数有问题:
如果我在Windows默认命令shell提示符上运行相同的命令,那么它就像一个魅力.
我试过的选项:
powershell windows-installer installshield command-line-arguments msiexec