我过去使用适用于Visual Studio的Installshield Limited Edition运行此自定义操作并且它已经运行。但是现在当我使用Installshield 2016尝试此操作时,此自定义操作会给我一个1722错误并回滚安装。日志文件没有提供比“失败错误1 ...”和1722错误更多的详细信息。
通过向导进行自定义操作设置 -
工作目录:InstallDir
FileName&命令行:“[SystemFolder] cmd.exe”/ c“[INSTALLDIR] somefilename.exe”“'%r''%keyname = keyname''%keydll = some.dll''%appexe = [INSTALLDIR] differentfilename.exe ““
这应该是从命令行运行somefilename.exe,参数为“%r”,“%keyname”,“%keydll”& “%appexe”。
当我在命令行上直接运行它时 - “C:\ Program Files(x86)”\ somefilename.exe“%r”“%keyname = keyname”“%keydll = some.dll”“%appexe = C:\ Program Files(x86)\ differentfilename.exe” - 它运行正常。
我想我在某个地方错过了一些引用,我尝试了各种组合而没有运气。
任何想法我做错了什么?
提前致谢!
答案 0 :(得分:1)
一些建议:
您应该发布与此相关的详细MSI日志部分,因为它应该显示完整已解析的命令行,假设您已创建完整的详细日志而不是部分日志。
目前尚不清楚为什么需要使用cmd夹克来运行此程序。如果它是普通的Windows程序,只需将可执行文件作为自定义操作运行。
当您从交互式用户资源管理器shell运行时,您将获得一些基础结构(例如工作目录),而这些基础结构是由msiexec.exe进程启动的自定义操作所无法获得的。这很重要,因为您没有指定some.dll的显式完整路径,因此它可以找到该文件并不明显。
说一下这个自定义操作的运行方式及其类型可能很有用。例如,如果它变为立即自定义操作(所有VS自定义操作都被延迟),那么它将失败,因为尚未安装任何文件。同样,如果它被推迟但在InstallFiles标准操作之前以某种方式延迟,则会失败。
Visual Studio生成的项目运行的所有自定义操作都将延迟并在每个系统中使用系统帐户运行" Everyone"安装。如果您的自定义操作需要提升,那么它也必须延迟,并且MSI必须显示UAC提升对话框,否则它可能会运行但会因访问错误而失败。它可能已成为每用户安装的非提升。
答案 1 :(得分:1)
感谢@PhilDW的建议。
我可以拿出cmd夹克然后运行exe并尝试。
我终于通过更改一些引号等工作了。这是最终的FileName&命令行参数如下所示:
“[SystemFolder] cmd.exe”/ c start“”/ d“C:\ Program Files(x86)\ foldername \”“somefile.exe”“%r”“%keyname = something”“ %keydll = something.dll“”%appexe = C:\ Program Files(x86)\ otherfilename.exe“
希望这有助于某人。