当我的应用程序想要退出时,通过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吗?
答案 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>