如何修复"找不到自定义操作文件的安装项目"异常?

mik*_*igs 24 ssis windows-services custom-action setup-project

我正在尝试为Windows服务创建一个安装项目.我已按照http://support.microsoft.com/kb/816169上的说明创建安装项目,没有任何问题.

我希望能够在安装过程中获取一个值,以便使用用户所需的设置更新app.config.我添加了一个Textboxes(A)对话框来检索值.我设置了Edit1Property属性设置为"TIMETORUN",并在我的主输出操作的CustomActionData属性我把以下内容:/ TimeToRun ="[TIMETORUN] \".到现在为止还挺好.运行设置我可以从Context.Parameters集合中检索TimeToRun值而不会出现问题.

为了找到app.config,我还需要将TARGETDIR Windows Installer属性的值传递给我的自定义操作.事情开始分崩离析.为了实现这一点,必须改变上面的CustomActionData:/ TimeToRun ="[TIMETORUN] \"/ TargetDir ="[TARGETDIR] \".现在,当我运行安装程序时,我收到以下错误消息:

错误1001.初始化安装时发生异常.System.IO.FileNotFoundException:无法加载文件或程序集'file:/// C:\ Windows\SysWOW64\Files'或其依赖项之一.该系统找不到指定的文件.

如果谷歌这个问题,你将不可避免地发现通过简单地添加斜线到其巨大成功的人/ TARGETDIR ="[TARGETDIR] \"中的部分CustomActionData.遗憾的是,这并没有解决我的问题.

我尝试了很多不同的CustomActionData字符串变体,但没有一个工作.我试图登录到从我重写文件安装方法来确定破损了,不过没有创建日志文件,因为它甚至没有得到那么远.如错误所示,失败是在初始化步骤期间.

我有一种预感,它可能是安装项目试图加载的依赖项之一.也许某种东西被附加到CustomActionData字符串并且不能很好地与TARGETDIR值(包含空格,即"C:\ Program Files\My Company\Project Name")一起使用.同样,这是另一种预感,由于我无法调试设置过程,我似乎无法确认.

还有一点需要提及,是的,这是另一种预感,这可能是64位版Windows上安装项目的问题吗?我正在运行Windows 7 Professional.

我将提供依赖项的名称,以防它有用:

  • Microsoft .NET Framework
  • Microsoft.SqlServer.DtsMsg.dll
  • Microsoft.SqlServer.DTSPipelineWrap.dll
  • Microsoft.SqlServer.DTSRuntimeWrap.dll
  • Microsoft.SQLServer.ManagedDTS.dll
  • Microsoft.SqlServer.msxml6_interop.dll
  • Microsoft.SqlServer.PipelineHost.dll
  • Microsoft.SqlServer.SqlTDiagM.dll

正如您可能从依赖项中收集的那样,Windows服务正在安排对DTSX包的调用.

对不起,长期咆哮.感谢您的任何帮助,您可以提供.

mik*_*igs 40

答案非常简单.如果CustomActionData中的最后一个参数将包含空格,因此您必须用引号和尾部斜杠包围它,则还必须在尾部斜杠后面加一个空格,如下所示:

/ TimeToRun ="[TIMETORUN] \"/ TargetDir ="[TARGETDIR] \"

解决方案和解释可以在这里找到.

  • 谢啦!我会花很多时间去发现,或者考虑到我对这种恶毒,邪恶技术的其他问题,我可能已经放弃了.(MSI) (3认同)
  • 此外,获取自定义操作的日志文件的技巧是将开关*/LogFile = <filename>/LogToConsole = true*添加到CustomActionData属性以进行自定义操作. (2认同)