能否通过编程方式设置Windows服务的用户帐户?

9

我创建了一个Windows服务,账户设置为用户。这意味着当我安装该服务时,需要传递用户名和密码。是否有一种方法可以在ProjectInstaller类中或BeforeInstall事件中设置它们?如果有,应该如何设置?

5个回答

6
以下内容是项目安装程序的补充,它将在安装期间分配服务登录信息。
    public ProjectInstaller()
    {
        InitializeComponent();

        serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.<account type>;
        serviceProcessInstaller1.Username = <domain\userId>;
        serviceProcessInstaller1.Password = <password>;
    }

如果您在代码中未指定帐户,并且将ServiceProcessInstaller属性设置为用户,则在安装过程中会打开一个表单对话框,允许执行安装的个人指定域用户帐户和密码。 - JohnL

3

你能在运行时设置用户名和密码吗(而不是编译时)?你需要能够访问已编译到服务可执行文件中的安装程序才行吧?我可能得另寻其他解决办法,比如使用 WMI。 - Adam Neal
您的服务可以拥有自己的安装程序类,该类继承自“System.Configuration.Install.Installer”。我们使用这个继承类并将一个表单与之关联。在安装过程中,该表单会弹出并提示用户输入各种信息,包括用户名/密码等。然后在安装程序类中,您可以重写OnBeforeInstall方法并设置Me.ServiceProcessInstaller1.Username属性。 - MattH
如何修改已存在的WinService的Windows服务账户? - Kiquenet


0

没有模板的Windows服务中,有关于设置服务参数和其他内容的一些介绍。它位于第5页的自定义服务部分。


-1
通常情况下,您可以将这些凭据传递给Installer类。您可以硬编码它或将其作为命令行参数传递。第二种方法更合适,但它会不必要地解析命令行参数。
我向您提出第三种方法... 嗨!我是一个开源Windows服务托管框架Daemoniq的开发人员。通过命令行传递凭据是其中之一的功能。您可以从http://daemoniq.org下载它。
当前功能包括:
- 通过CommonServiceLocator实现容器无关的服务定位 - 通过app.config设置常见的服务属性,如serviceName、displayName、description和serviceStartMode - 在同一进程上运行多个Windows服务 - 通过app.config设置恢复选项 - 通过app.config设置依赖的服务 - 通过命令行设置服务进程凭据 - 通过命令行安装、卸载、调试服务 干杯!

不要脸地为一些已经不存在的东西做宣传。 - Grubsnik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接