Wix CAQuietExec - Path的前缀是' C:\ Windows \ SysWOW64 \'

时间:2014-04-23 09:35:56

标签: windows wix windows-installer

我提供了这样的路径作为属性值: [INSTALLFOLDER]Program Scripts\Script1.rss 其中 INSTALLFOLDER C:\Program Files (x86)\ABCCompany\DEFProductInstaller\

但它以某种方式被解释为: 的 C:\Windows\SysWOW64\C:\Program Files (x86)\ABCCompany\DEFProductInstaller\Program Scripts\Script1.rss

这是属性和关联的CustomAction

<Property Id="CreateDataSources" 
          Value="&quot;rs.exe&quot; -i &quot;[INSTALLFOLDER]Program Scripts\Script1.rss&quot;"/>

<CustomAction Id="CreateDataSources" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

这是日志:

 Property(S): SystemFolder = C:\Windows\SysWOW64\
 ...

 MSI (s) (8C:44) [14:41:41:202]: Executing op: CustomActionSchedule(Action=CreateDataSources,ActionType=3073,Source=BinaryData,Target=CAQuietExec,CustomActionData="rs.exe" -i "[INSTALLFOLDER]Program Scripts\Script1.rss" -s http://localhost/ReportServer -v DataSourcePath="" -v DBServer="."  -v InitialCatalog="MyDB" -v UserId="" -v Password="" -v IntegratedSecurity="True")
 MSI (s) (8C:78) [14:41:41:211]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIFB.tmp, Entrypoint: CAQuietExec
 MSI (s) (8C:90) [14:41:41:211]: Generating random cookie.
 MSI (s) (8C:90) [14:41:41:213]: Created Custom Action Server with PID 16716 (0x414C).
 MSI (s) (8C:C4) [14:41:41:237]: Running as a service.
 MSI (s) (8C:C4) [14:41:41:238]: Hello, I'm your 32bit Impersonated custom action server.
 CAQuietExec:  Could not find a part of the path 'C:\Windows\SysWOW64\C:\Program Files (x86)\ABCCompany\DEFProductInstaller\Program Scripts\Script1.rss'.
 CAQuietExec:  Error 0x80070001: Command line returned an error.
 CAQuietExec:  Error 0x80070001: CAQuietExec Failed

知道我做错了什么?

更新<Property>值更改为绝对路径可解决此问题。

  <Property Id="CreateDataSources" 
            Value='&quot;rs.exe&quot; -i &quot;C:\Program Files (x86)\ABCCompany\DEFProductInstaller\Program Scripts\Script1.rss&quot;/>

但我需要它与INSTALLFOLDER

一起使用

2 个答案:

答案 0 :(得分:0)

日志没有像我预期的那样失败失败(也许最近有一次WiX更改)但根据我的经验,对rs.exe的调用不仅要包含在引号中,而且还必须是绝对路径。 &quot;[SystemFolder]rs.exe&quot;

BTW,您似乎正在使用RS.exe来部署报告服务更改。我不相信该文件在法律上可再分发。我大约6年前在一家公司工作,在那里我编写了一个表驱动的C#/ DTF自定义操作,它使用SSRS Web服务来发布目录,报告和数据源。我从未实现过回滚。此外,这是一种类型,其中Impersonate = No可能会很差。这是因为在某些情况下,登录用户可能已写入SSRS Web服务,而SYSTEM帐户可能没有。

答案 1 :(得分:0)

您需要提供要运行的.exe的完整路径。 CreateProcess不使用系统路径:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx