如何使用c#将exe文件作为窗口服务运行

13 浏览
0 Comments

如何使用c#将exe文件作为窗口服务运行

我正在尝试将一个exe文件作为Windows服务运行。我以前通过手动操作来完成这个任务,就像这样:

sc create TestService binPath= "C:\MyExePathWhichIsToBeRunAsWindowService"

它能够正常工作,当我查看服务时,我能够找到它。现在我需要使用C#代码来完成相同的任务。

代码应该要求用户输入exe文件的路径,并且该文件必须作为Windows服务运行,用户还需要提供给该窗口服务的名称。这两个信息用户将在运行时输入,对我来说是一个简单的任务,但是一旦我获取到这些信息,我该如何在C#代码中运行下面的命令呢?

sc create TestServiceNameUsrEntered binPath= "path user entered for exe at run time"

有人能帮帮我吗?

编辑:请注意,用户始终输入服务应用程序exe文件,而不是任意文件。

0
0 Comments

如何使用C#将exe作为窗口服务运行

问题的原因:

在C#中运行exe作为窗口服务的需求。

解决方法:

可以使用Process.Start函数来实现。可以尝试以下代码:

Process.Start("sc", String.Format("create \"{0}\" binPath=\"{1}\"", serviceName, binPath));

0
0 Comments

问题:如何使用C#将exe文件作为窗口服务运行?

原因:在Windows操作系统中,exe文件默认是以应用程序的形式运行的,而不是作为窗口服务运行。如果想将一个exe文件作为窗口服务运行,需要进行特殊的配置和设置。

解决方法:有两种解决方法可供选择。

方法一:使用Topshelf库(https://github.com/Topshelf/Topshelf)

可以使用Topshelf库来方便地将exe文件作为窗口服务运行。Topshelf是一个开源项目,它提供了简化Windows服务开发的API和工具。

方法二:自己从头开始创建

如果你喜欢从头开始自己创建,可以参考Topshelf库的HostInstaller.cs文件中的代码。这段代码向注册表添加了所需的注册表项,以将exe文件作为窗口服务运行。

以下是HostInstaller.cs文件中的代码示例:

using (RegistryKey system = Registry.LocalMachine.OpenSubKey("System"))
using (RegistryKey currentControlSet = system.OpenSubKey("CurrentControlSet"))
using (RegistryKey services = currentControlSet.OpenSubKey("Services"))
using (RegistryKey service = services.OpenSubKey(_settings.ServiceName, true))
{
    service.SetValue("Description", _settings.Description);
    var imagePath = (string)service.GetValue("ImagePath");
    _log.DebugFormat("Service path: {0}", imagePath);
    imagePath += _arguments;
    _log.DebugFormat("Image path: {0}", imagePath);
    service.SetValue("ImagePath", imagePath);
}

以上是关于如何使用C#将exe文件作为窗口服务运行的原因和解决方法的内容。通过使用Topshelf库或参考HostInstaller.cs文件中的代码,可以轻松地将exe文件配置为窗口服务运行。

0