我们使用Visual Studio 2008上的工具创建了一个MSI安装程序。
这在Installer类中实现了一些自定义操作。
它适用于所有测试服务器,但由于某种原因,它在其中一个生产服务器中失败。错误消息是:
错误。 1001.用法:InstallUtil [/ u | / uninstall] [option [..]] assembly [[option [...]] assembly]
installUtil在每个给定程序集中执行安装程序。||如果/ u或/ uninstall开关是......
答案 0 :(得分:6)
确实这已经困扰了我好几天。
在线路上传递给msiexec的参数很好,并在Properties集合中正确显示,并在日志中显示。
例如:
msiexec /i setup.msi /L* log.txt TargetDir="D:\Samples\Test\" CustAddOnDir="D:\Samples\Test\AddOns\"
以您期望的方式在日志中显示:
属性(C):TARGETDIR = D:\ Samples \ Test \
属性(C):CUSTADDONDIR = D:\ Samples \ Test \ AddOns \
但是,当您尝试通过属性页面上的CustomactionData将这些内容传递给自定义操作时出现此错误:
/ addOnDir =“[CUSTADDONDIR]”
这似乎很愚蠢,但是从msiexec命令行中删除尾随的“\”修复了这个问题。
msiexec /i setup.msi /L* log.txt TargetDir="D:\Samples\Test" CustAddOnDir="D:\Samples\Test\AddOns"
现在的问题是尝试将TargetDir传递给自定义操作总是失败。
/destDir="[TARGETDIR]"
这似乎是由于尾随“\”总是被追加,如果它不存在的话。如果你想让用户选择要安装的新目录,这真的很糟糕。你会如何将其纳入自定义操作?
你需要消除尾随斜杠:
/destdir="[TARGETDIR]\"
答案 1 :(得分:1)
您将自定义安装程序类传递给目录的其中一个参数是什么?如果是这样,很可能它会在参数名称的末尾附加一个额外的\,而这反过来又没有被正确转义,从而导致出现此错误。
尝试运行与此类似的命令: msiexec / i .msi / L * V“”
检查日志文件以找到有问题的参数。
不幸的是我还没有找到解决方法,除了以其他方式将参数传递给自定义程序集(硬编码 - yikes!),或者在C#代码中从注册表重新读取我的路径值