Wix - 在ComponentGroup

时间:2018-04-10 12:13:36

标签: c# wix guid etw-eventsource

当我的应用程序想要退出时,通过Windows日志发生错误,我需要在我的安装程序中添加一个定义EventMessageFile的EventSource,它将是.NET Framework的事件日志消息文件 (我正在遵循这个解决方案:https://stackoverflow.com/a/574055/6617804)。

在我的 Component.wxs 中,我在此ComponentGroup LogsComponents 中添加了Id LogsNet 的组件:

<ComponentGroup Id="LogsComponents" Directory="LogsFolder">
  <Component Id="Logs" Guid="{339873E0-0984-4A1B-8C53-0F64DFAD56BC}">
    <File Id="..." Source="..." />
    <File Id="..." Source="..." />
    <File Id="..." Source="..." />
    <File Id="..." Source="..." />
    <RemoveFolder Id='LogsFolder' On='uninstall' />
    <RegistryValue Root='HKCU'
                       Key='Software\[Manufacturer]\[ProductName]'
                       Type='string'
                       Value=''
                       KeyPath='yes' />
  </Component>

  <Component Id="LogsNET" >
    <util:EventSource
       Log="Application" Name="ROOT Builder"
       EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll"/>
  </Component>
</ComponentGroup>

当我尝试以(不生成GUID)的方式添加时,会带来错误:

  

Component / @ Guid属性的值&#39; *&#39;对此组件无效,因为它不符合自动生成guid的条件。使用Directory作为KeyPath或包含ODBCDataSource子元素的组件不能使用自动生成的guid。确保您的组件没有Directory作为KeyPath,并将任何ODBCDataSource子元素移动到具有显式组件guid的组件。 OptifuelInfomax_Installer(OptifuelInfomax_Installer \ OptifuelInfomax_Installer)C:\ Source \ Infomax \ OptiFuelInfomax \ OptifuelInfomax_Installer \ Components.wxs 80

当我在工具中使用Visual Studio生成GUID 时,&gt;创建GUID (注册表格式),它在错误列表中说:

  

Component元素包含一个意外的属性&#39; GUID&#39;。 OptifuelInfomax_Installer(OptifuelInfomax_Installer \ OptifuelInfomax_Installer)C:\ Source \ Infomax \ OptiFuelInfomax \ OptifuelInfomax_Installer \ Components.wxs 80

它还在IDE中说:&#39; GUID&#39;属性是不允许的。

我应该为该组件使用GUID吗?

2 个答案:

答案 0 :(得分:1)

还有一件事,我将添加此作为获取链接和免责声明的答案:

我没有完成EventMessageFile次安装,但我只是想补充说硬编码路径总是错误的(你使用%SystemRoot%可能仍然有用)。毫无疑问,系统分区不仅仅是C:\,这种情况并不少见。请参阅此特定答案(这是您与自己链接的“主题”的特定答案),了解如何消除您的硬编码路径:How do you create an event log source using WiX

此外,这里是内置WiX .NET属性的文档:WixNetfxExtension(页面下方)。 I would also recommend you install using one file per component。当然不要在同一个组件中安装多个二进制文件 - 这违反了the component rules。还有a Symantec article on component rules

答案 1 :(得分:0)

这是&#34;&#39; GUID&#39;属性不允许&#34; 只是因为它无法识别属性&#39; GUID&#39; - 区分大小写; 真正的属性名称是&#39; Guid&#39; ,因此它正在编译:

<Component Id="LogsNET" Guid ="{...blah123...}">
    <util:EventSource
       Log="Application" Name="ROOT Builder"
       EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll"
       KeyPath="yes"/>
  </Component>