gpt4 book ai didi

c# - 使用 lib 文件夹安装 .net Windows 服务

转载 作者:太空狗 更新时间:2023-10-29 23:40:31 25 4
gpt4 key购买 nike

我想为我的 Windows 服务创建一个设置。我的 windows 服务的 dll 放在/Lib/文件夹中。

我向服务添加了一个安装程序类。并在安装项目上添加了自定义操作。

问题是,当我尝试安装该服务时 - 它失败并出现错误:错误 1001。无法在 ... 中获取安装程序类型

发生此错误是因为 dll 与服务 .exe 不在同一目录中。我在服务配置中使用探测,但安装 util 无法识别该探测..

我想找到解决该问题的方法,并尝试了多种方法来创建使用服务 Controller (sc.exe) 的服务。尝试使用 cmd.exe 将其作为自定义操作运行。等等。

这应该是一个常见问题..有人找到合适的解决方案了吗?

最佳答案

我遇到了同样的问题,这篇文章或 MSDN 中建议的选项都没有帮助。我想到了另一个解决方案:

通过在 InstallUtil.exe 上使用 Reflector,我发现 InstallUtil 只是一个用于调用 System.Configuration.Install.ManagedInstallerClass.InstallHelper(args) try/catch block (它还设置当前线程的 UI 文化并显示版权)。 ManagedInstallerClass.InstallHelper 本身驻留在 System.Configuration.Install.dll 程序集中,每个人都可以访问。因此,我只是修改了我的服务的 Program.Main 方法以允许安装。请参阅下面的快速代码:

static class Program
{
static void Main(string[] args)
{
if (args != null && args.Any(arg => arg == "/i" || arg == "/u"))
{
// Install or Uninstall the service (mimic InstallUtil.exe)
System.Configuration.Install.ManagedInstallerClass.InstallHelper(args);
}
else
{
// Run the service
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[]
{
new MyService()
};
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
}
}

您可以这样做,或者创建您自己的 InstallUtil 版本。

关于c# - 使用 lib 文件夹安装 .net Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com