Answers:
您不需要installutil.exe
,甚至可能没有权利重新分发它。
这是我在应用程序中执行此操作的方式:
using System;
using System.Collections.Generic;
using System.Configuration.Install;
using System.IO;
using System.Linq;
using System.Reflection;
using System.ServiceProcess;
using System.Text;
static void Main(string[] args)
{
if (System.Environment.UserInteractive)
{
string parameter = string.Concat(args);
switch (parameter)
{
case "--install":
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
}
else
{
ServiceBase.Run(new WindowsService());
}
}
基本上,您可以使用ManagedInstallerClass
示例中所示的方法自行安装/卸载服务。
然后,只需在InnoSetup脚本中添加如下内容即可:
[Run]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--install"
[UninstallRun]
Filename: "{app}\MYSERVICE.EXE"; Parameters: "--uninstall"
Filename: "net.exe"; Parameters: "start WinServ"
。如果不起作用,则可以再添加一个开关--start到c#应用程序,然后使用ServiceController类(msdn.microsoft.com/en-us/library/…)从程序直接启动Windows服务。
using System.Reflection;
或更改Assembly
,以System.Reflection.Assembly
在上面的代码。
如果要避免在用户升级时重新启动,则需要在复制exe之前先停止服务,然后再重新启动。
服务中有一些脚本功能可以执行此操作-启动,停止,安装,删除服务的功能