[英]Unable to install a Windows Service programmatically
我一直在嘗試通過C#安裝Windows Service幾個小時。
當我運行InstallService()
函數時,即使在InstallService()
運行后, IsInstalled()
返回false,因此我無法啟動Windows服務。
例如:
InstallService();
IsInstalled(); // false
ServiceBase[] ServicesToRun = new ServiceBase[] { new Service1() };
ServiceBase.Run(ServicesToRun); //Throws an exception because uninstalled!
所以這是安裝代碼,我只顯示相關代碼:
private static void InstallService()
{
if (IsInstalled()) return;
try
{
using (AssemblyInstaller installer = GetInstaller())
{
IDictionary state = new Hashtable();
try
{
installer.Install(state);
installer.Commit(state);
}
catch
{
try
{
installer.Rollback(state);
}
catch { }
throw;
}
}
}
catch
{
throw;
}
}
private static AssemblyInstaller GetInstaller()
{
AssemblyInstaller installer = new AssemblyInstaller(
typeof(Service1).Assembly, null);
installer.UseNewContext = true;
return installer;
}
private static bool IsInstalled()
{
using (ServiceController controller =
new ServiceController("Service1"))
{
try
{
ServiceControllerStatus status = controller.Status;
}
catch
{
return false;
}
return true;
}
}
public static class SelfInstaller
{
private static readonly string _exePath = Assembly.GetExecutingAssembly().Location;
public static bool InstallMyService()
{
try
{
ManagedInstallerClass.InstallHelper(new string[] { _exePath });
}
catch
{
return false;
}
return true;
}
public static bool UninstallMyService()
{
try
{
ManagedInstallerClass.InstallHelper(new string[] { "/u", _exePath });
}
catch
{
return false;
}
return true;
}
public static bool IsInstalled(string serviceName)
{
var serviceExists = ServiceController.GetServices().Any(s => s.ServiceName == serviceName);
if (serviceExists == null) return false;
return true;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.