是否可以以编程方式设置 Windows 服务的用户帐户?

Posted

技术标签:

【中文标题】是否可以以编程方式设置 Windows 服务的用户帐户?【英文标题】:Is it possible to programmatically set the user account for a windows service? 【发布时间】:2010-11-17 01:41:28 【问题描述】:

我创建了一个将帐户设置为用户的 Windows 服务。这意味着当我安装服务时,我需要传递用户名和密码。有没有办法在 ProjectInstaller 类中或在 BeforeInstall 事件中设置这些?如果是这样怎么办?

【问题讨论】:

【参考方案1】:

项目安装程序的以下添加将在安装期间分配服务登录信息。

    public ProjectInstaller()
    
        InitializeComponent();

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

【讨论】:

如果您没有在代码中指定帐户,并且将帐户的 ServiceProcessInstaller 属性设置为用户,安装期间将打开一个表单对话框,允许执行安装的个人指定域用户帐户和密码。【参考方案2】:

看看System.ServiceProcess.ServiceProcessInstaller

【讨论】:

你能用它在运行时(而不是编译时)设置用户名和密码吗?您不需要能够访问已经编译到您的服务可执行文件中的安装程序吗?我可能不得不改用 WMI 路线。 您的服务可以拥有自己的安装程序类,该类继承自“System.Configuration.Install.Installer”。我们使用这个继承的类并将一个表单与它关联起来。该表单在安装过程中出现并提示各种内容,包括用户/密码。然后在 Installer 类中覆盖 OnBeforeInstall 并设置 Me.ServiceProcessInstaller1.Username。 并修改WinService的windows服务帐号还存在?【参考方案3】:

看看DynamicInstaller from CodeProject

【讨论】:

【参考方案4】:

A Windows Service without a template 有一些关于设置服务参数和内容的内容,位于第 5 页的关于自定义服务的部分。

【讨论】:

【参考方案5】:

通常,您可以将这些凭据传递给 Installer 类。您可以对其进行硬编码或将其作为命令行参数传递。第二种方法更合适,但它会要求您不必要地解析命令行参数。

我向你建议第三种方法...

嗨!我是一个开放的开发者 源 Windows 服务托管 称为 Daemoniq 的框架。并且路过 通过命令行的凭据是其中之一 它的特点。你可以从 http://daemoniq.org

目前的功能包括:

通过 CommonServiceLocator 提供与容器无关的服务位置 设置常用服务属性,如 serviceName、displayName、description 和 serviceStartMode 通过 app.config 在同一进程上运行多个 Windows 服务 通过 app.config 设置恢复选项 通过 app.config 设置依赖的服务 通过命令行设置服务进程凭据 通过命令行安装、卸载、调试服务

干杯!

【讨论】:

无耻地插入不再存在的东西。

以上是关于是否可以以编程方式设置 Windows 服务的用户帐户?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从服务本身以编程方式重新启动 Windows 服务?还是我应该选择其他方法? [复制]

是否可以在 Windows 服务器存储上存储 .PEM 文件并以编程方式读取它

以编程方式将 Tomcat 的 Java 选项设置为 Windows 服务的方法

以编程方式更改任务栏设置?

以编程方式更改 Windows 电源设置

以编程方式设置网格排序