【发布时间】:2009-07-14 10:24:30
【问题描述】:
我的应用程序(它是一个 Windows 服务)需要一个命令行参数,即配置文件的位置。
我希望服务能够自动启动。填写“启动参数”值仅适用于手动启动,服务停止后该值不保留。
我尝试在注册表中手动编辑“可执行文件路径”,但 .net 服务没有将其重新识别为命令行(将路径的第二部分作为参数)
有没有办法在安装时设置默认参数(使用 InstallUtil 或任何其他方式)?
谢谢
【问题讨论】:
标签: .net
我的应用程序(它是一个 Windows 服务)需要一个命令行参数,即配置文件的位置。
我希望服务能够自动启动。填写“启动参数”值仅适用于手动启动,服务停止后该值不保留。
我尝试在注册表中手动编辑“可执行文件路径”,但 .net 服务没有将其重新识别为命令行(将路径的第二部分作为参数)
有没有办法在安装时设置默认参数(使用 InstallUtil 或任何其他方式)?
谢谢
【问题讨论】:
标签: .net
您可以通过将命令行参数附加到以下位置的 ImagePath 参数值来将命令行参数添加到您的服务:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<your service>\
使用Environment.GetCommandLineArgs Method,您可以在服务启动时阅读它们。
【讨论】:
我们使用应用程序配置文件来执行此操作,服务可以从那里读取它的初始化选项。
【讨论】:
ConfigurationManager.AppSettings["StateServerPort"] 读取设置,则该文件将从应用程序目录而不是工作目录中读取。
您知道吗,如果您使用服务安装程序,您可以根据安装程序中的内容来设置注册表设置,而无需让用户执行任何后期操作或运行某些批处理文件。
Imports System.ComponentModel
Imports System.Configuration.Install
Public Class ProjectInstaller
Public Sub New()
MyBase.New()
'This call is required by the Component Designer.
InitializeComponent()
'Add initialization code after the call to InitializeComponent
End Sub
Private Sub ServiceInstaller1_AfterInstall(ByVal sender As System.Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles ServiceInstaller1.AfterInstall
'Put some code regarding your Installation specific options.
End Sub
End Class
【讨论】: