理解.MSI详细跟踪 - 运行CustomAction

时间:2010-01-05 16:57:21

标签: visual-studio-2008 installer windows-installer installation

从.MSI详细描述中理解。我使用VisualStudio 2008创建了.MSI。

以下是我正在尝试做的事情的背景: http://xmlpreprocess.codeplex.com/Thread/View.aspx?ThreadId=79454

目标是运行一个名为XmlPreprocess.exe的程序,类似于: xmlpreprocess.exe /x:"SettingsFileGenerator.xml“/i:"web.config”/ e:QA / v

/ x:parm来自我的一个用户界面表单,而/ e:value来自四个单选按钮。

我将属性“InstallerClass”设置为False, 和属性“CustomActionData”: / x:“[SETTINGSFILE]”/ i:“[TARGETDIR] web.config”[CUSTOMSETTINGS] / e:[ENVIRONMENTBUTTON] 而且我要将“Arguments”属性留空。

这是跟踪告诉我的内容。看起来我的parms会到达适当的位置(我从Radio按钮中选择了“QA”)。错误与我在GUI屏幕上看到的相同 - “作为设置的一部分运行的程序没有按预期完成。请联系您的支持人员或软件包供应商。”我是不确定ErrorIcon信息是否只是噪声,或者它是否相关。

MSI (s) (A4:58) [10:46:09:130]: Executing op: CustomActionSchedule(Action=_78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2,ActionType=3090,Source=C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe,,CustomActionData=/x:"c:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\EnvironmentSettings\SettingsFileGenerator.xml" /i:"C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\web.config"  /e:QA)
MSI (s) (A4:58) [10:46:09:728]: Note: 1: 1722 2: _78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2 3: C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe 4:  
MSI (s) (A4:58) [10:46:09:728]: Note: 1: 2262 2: Error 3: -2147287038 
MSI (c) (E0:C8) [10:46:09:763]: Note: 1: 2262 2: Error 3: -2147287038 
DEBUG: Error 2835:  The control ErrorIcon was not found on dialog ErrorDialog
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2835. The arguments are: ErrorIcon, ErrorDialog, 
**Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.**  Action _78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2, location: C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe, command:  
MSI (s) (A4:58) [10:46:11:630]: Note: 1: 2262 2: Error 3: -2147287038 
MSI (s) (A4:58) [10:46:11:630]: Product: TFBIC.RCT.WCFWebServices -- Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.  Action _78D3A615_0FDF_491D_8BD0_4AA0A0DAE3C2, location: C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\XmlPreprocess.exe, command:  

Action ended 10:46:11: InstallExecute. Return value 3.
MSI (s) (A4:58) [10:46:11:633]: User policy value 'DisableRollback' is 0
MSI (s) (A4:58) [10:46:11:633]: Machine policy value 'DisableRollback' is 0

注意:通过执行以下操作获得上述跟踪:

msiexec / i“TFBIC.RCT.WCFWebServicesSetup.msi”/ L * V“C:\ logs \ WebServiceInstall.log”

更新:基于以下评论 - XmlPreprocess.exe(我的CustomAction)返回非零返回码。那我怎么调试呢?我需要查看通常在命令窗口中的结果。

更新01/07: 似乎这是不可能在没有看到程序输出的情况下进行调试 - 这就是我真正需要的。当安装程序发出错误时,我可以看到该目录中的文件,直到我单击“确定”按钮并将其全部删除。我转到命令提示符,键入xmlpreprocess.exe然后从上面的日志中复制/粘贴完全相同的字符串“/x:"c:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\EnvironmentSettings\SettingsFileGenerator .xml“/i:"C:\inetpub\wwwroot\TFBIC.RCT.WCFWebServicesSetup\web.config”/ e:QA“,它运行正常。

我看到Ryan关于丢失文件的观点,谢谢你。但是可能会有很多潜在的错误应该在XmlPreprocess程序的输出中清楚地显示出来。当然有一些东西可以看到输出?

两个可能缺少的文件是: 1)web.config本身(它在那里) 2)用户键入的文件的名称。

据我所知,没有办法验证用户输入了有效的文件名,并且安装的对话框中没有“文件选择器”。正确?或没有?

因此,即使用户输入了错误的文件名,我也需要给他一个更好的消息 “作为设置的一部分运行的程序未按预期完成。请联系您的支持人员或软件包供应商。”

也许我应该为XmlPreprocess编写自己的C#包装器并调用它,然后拦截输出并读取它?

2 个答案:

答案 0 :(得分:2)

与我建议使用cmd.exe /C XmlPreProcess.exe ...进行重定向的previous question一样,要进行调试,您可以尝试使用/K代替/C。然后任何输出应该保持不变,并且您可以在出错时在MSI的上下文中工作。

我真正怀疑的是问题是您的自定义操作的安排。如果此操作是立即执行,在InstallFinalize之前安排,并且打算对要安装的文件进行操作,则会在将文件安装到您期望的位置之前运行。对此的正确修复通常是在脚本中运行操作(也称为延迟),以便通过在InstallFiles和InstallFinalize之间安排它,它实际上在相应的位置运行。

至于为最终用户提供更好的错误,或允许他们浏览文件,这些都会采取自定义操作,并且可能需要是DLL操作(EXE操作只能提供通过/失败反馈)。是否更好(或更容易)提供浏览对话框或验证用户提供的路径将是您的选择。我不确定你在Visual Studio Installer项目中可以做多少这件事(我假设你的标签正在使用它)。

答案 1 :(得分:1)

是的,ErrorIcon只是噪音,可以忽略。我现在正在从MSI中删除这个“噪音”,所以我可以正确调试。

错误是由自定义操作引起的,返回1722的Windows错误。

在cmd提示符下运行'net helpmsg 1722'会产生;

 The RPC server is unavailable.

因此该命令正在执行某些操作,这取决于本地RPC服务器服务(未启动,这很奇怪,因为它对于我认为对Windows而言至关重要)或者远程服务器正在报告这些服务器。

相关问题