我有一个用C#编写的标准.NET Windows服务.
它可以在不使用InstallUtil的情况下自行安装吗?我应该使用服务安装程序类吗?我该怎么用?
我希望能够拨打以下电话:
MyService.exe -install
Run Code Online (Sandbox Code Playgroud)
它将具有与调用相同的效果:
InstallUtil MyService.exe
Run Code Online (Sandbox Code Playgroud) 使用时创建Windows服务:
sc create ServiceName binPath= "the path"
Run Code Online (Sandbox Code Playgroud)
如何将参数传递给Installer类的Context.Parameters集合?
我对sc.exe文档的阅读是这样的论证只能在最后传递binPath,但我没有找到一个例子或者能够成功地做到这一点.
除了service.StartType = ServiceStartMode.Automatic我的服务在安装后没有启动
解
在我的ProjectInstaller上插入此代码
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
base.OnAfterInstall(savedState);
using (var serviceController = new ServiceController(this.serviceInstaller1.ServiceName, Environment.MachineName))
serviceController.Start();
}
Run Code Online (Sandbox Code Playgroud)
感谢ScottTx和Francis B.
我没有编写批处理脚本的经验,但我想知道是否有一种方法可以installutil.exe使用这样的脚本安装.NET Windows服务,或者卸载服务(如果已经安装),理想情况下我需要某种确认喜欢执行卸载(例如按y卸载).
以下是一些细节:
C:\Program Files\Data Service目录中program.log在安装服务后,将一条简单的行添加到日志文件(我们将在此目录中调用它)会很不错C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727如果你觉得这可以用更好的方式完成,那么听听其他建议会很高兴.我总是可以编写服务安装程序,但这不是优先事项.
我在bat文件中有以下内容:
@ECHO OFF
REM The following directory is for .NET 4.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%
echo Installing IEPPAMS Win Service...
echo ---------------------------------------------------
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil My.WindowsService.exe
echo ---------------------------------------------------
pause
echo Done.
Run Code Online (Sandbox Code Playgroud)
问题是,即使bat文件与My.WindowsService.exe位于同一文件夹中,它也会尝试在C:\ Windows\System32中查找它.
我该如何解决这个问题?