我正在使用wix创建一个安装程序,它正在挂起StartServices操作。这是我正在安装的唯一服务:
<Component Id="CMP_RemindexNP.exe" Guid="{3FB99890-752D-4652-9412-72230695A520}">
<File Id="FILE_INSTALLFOLDER_RemindexNPEXE" Source="RemindexNP.exe" KeyPath="yes"/>
<RegistryKey Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\RemindexNP\Parameters">
<RegistryValue Id="rg_remNP1" Action="write" Name="AppDirectory" Value="[INSTALLFOLDER]" Type="string"/>
<RegistryValue Id="rg_remNP2" Action="write" Name="Application" Value="[INSTALLFOLDER]RemindexNP.exe" Type="string"/>
</RegistryKey>
<ServiceInstall DisplayName="RemindexNP" Id="srv_remNP" Name="RemindexNP" Start="auto" Type="shareProcess" ErrorControl="ignore"/>
<ServiceControl Id="srvc_remNP" Name="RemindexNP" Remove="both" Start="install" Stop="uninstall" Wait="no"/>
</Component>
以下是日志文件中的StartService操作:
Action 17:15:08: StartServices. Starting services
Action start 17:15:08: StartServices.
StartServices: Service: Starting services
Action ended 17:15:08: StartServices. Return value 1.
如果我等待5-10分钟,安装程序会有一些“过早结束”的事情。或者我可以在任务管理器中停止任务,几分钟后,我得到相同的对话框。
我已经尝试将ServiceInstall中的Type属性设置为shareProcess和ownProcess,两者都不起作用。我也试过将Wait设置为no和yes。
我的ServiceInstall元素有问题吗?
任何建议都将不胜感激。
答案 0 :(得分:0)
我的安装程序中有以下服务组件,它可以正常工作。当我在安装过程中遇到问题时,服务未正确启动,在服务中使用某种日志记录机制非常有帮助。无法完成安装,因为由于某些配置错误导致服务无法启动。我无法分析并解决问题,因为我无法查看由我的安装程序创建并由该服务使用的事件日志。我建议你走相同的路线,因为从语法上讲,你的ServiceInstall和ServiceControl元素看起来是正确的。
<Component Id="CMP_SERVICE" Guid="YOURGUIDHERE">
<File Source="Files/Service.exe" Id="Service.exe" KeyPath="yes" Compressed="no" />
<ServiceInstall
Id="SvcInstallService"
Name="Service"
DisplayName="Service"
Type="ownProcess"
Description="Service Desc"
Start="auto"
ErrorControl="normal">
<util:ServiceConfig
ServiceName="Service"
FirstFailureActionType="restart"
SecondFailureActionType="restart"
ResetPeriodInDays="1"
RestartServiceDelayInSeconds="5"
ThirdFailureActionType="restart"/>
</ServiceInstall>
<ServiceControl
Id="sc_Service"
Name="Service"
Start="install"
Stop="both"
Remove="uninstall"
Wait="no" />
</Component>
要创建Eventlogsource,请使用以下代码:
<PropertyRef Id="NETFRAMEWORK20"/>
<PropertyRef Id="NETFRAMEWORK40FULL"/>
<Component Id="CMP_ServiceEventLogNetfx2" Guid="YOURGUIDHERE">
<util:EventSource Name="Service" EventMessageFile="{[NETFRAMEWORK20INSTALLROOTDIR]}EventLogMessages.dll" Log="YourLog" KeyPath="yes"/>
<Condition>
<![CDATA[(Installed OR NETFRAMEWORK20) AND VersionNT < 600]]>
</Condition>
</Component>
<Component Id="CMP_ServiceEventLogNetfx4" Guid="YOURGUIDHERE">
<util:EventSource Name="Service" EventMessageFile="{[NETFRAMEWORK20INSTALLROOTDIR]}EventLogMessages.dll" Log="YourLog" KeyPath="yes"/>
<Condition>
<![CDATA[(Installed OR NETFRAMEWORK40FULL) AND VersionNT >= 600]]>
</Condition>
</Component>
当然,您必须在服务中使用该事件日志。为此,请使用System.Diagnostics.EventLog
类及其WriteEntry
方法。
最后一步是在安装过程中打开eventviewer(eventvwr.msc)并查看服务的日志。