【问题标题】:Credentials when Installing Windows Service安装 Windows 服务时的凭据
【发布时间】:2010-02-12 15:55:33
【问题描述】:

我正在尝试使用 VisualStudio.Net 部署项目安装 C# Windows 服务项目。

要运行部署项目,我右键单击并从上下文菜单中选择“安装”,安装向导运行并最终提示我“设置服务登录”对话框,要求输入用户名和密码。

当我从命令行使用 sc 实用程序安装服务时,我不必提供凭据。

我是否必须为此服务创建一个登录名?我更喜欢像其他服务一样使用“本地系统”或“网络服务”(不确定有什么区别)。

【问题讨论】:

  • 在ProjectInstaller中右键serviceProcessInstaller => properties set account to LocalSystem

标签: c# windows-services installation


【解决方案1】:

将此代码添加到 Windows 服务项目中 projectInstaller.Designer.cs 文件中的私有 void InitializeComponent() 方法中。

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

如果您的进程安装程序的定义是:

private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;

【讨论】:

  • 这就是我所需要的。谢谢!
  • @anthares 我需要以当前用户身份运行该服务,我该如何解决?我使用:ServiceAccount.User 但在安装时获取密码请求...
  • 因为代码点在设计器生成的代码中,我只是通过打开设计器,获取 serviceProcessInstaller1 对象的属性,然后在 Account 的下拉列表中选择 LocalSystem 来做同样的事情。
  • 我更喜欢@David 下面的回答,使用设计器.... 大致相同,但我认为这种方法更好。
  • 拯救了我的一天...魔鬼在细节中... T H A N K S
【解决方案2】:

查看此链接:http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

注意此部分:为您的服务创建安装程序

对您的 ServiceProcessInstaller 进行更改:

在设计器中,单击 Visual Basic 项目的 ServiceProcessInstaller1,或 Visual C# 项目的 serviceProcessInstaller1。将 Account 属性设置为 LocalSystem。这将导致服务被安装并在本地服务帐户上运行。

【讨论】:

  • 这优先于通过 projectInstaller.Designer.cs 文件中的代码进行设置。
【解决方案3】:

在包含该服务的项目中,添加一个 Installer 类。让它看起来像这样:

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        serviceProcessInstaller.Account = ServiceAccount.LocalSystem; // Or whatever account you want

        var serviceInstaller = new ServiceInstaller
        {
            DisplayName = "Insert the display name here",
            StartType = ServiceStartMode.Automatic, // Or whatever startup type you want
            Description = "Insert a description for your service here",
            ServiceName = "Insert the service name here"
        };

        Installers.Add(_serviceProcessInstaller);
        Installers.Add(serviceInstaller);
    }

    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);

        // This will automatically start your service upon completion of the installation.
        try
        {
            var serviceController = new ServiceController("Insert the service name here");
            serviceController.Start();
        }
        catch
        {
            MessageBox.Show(
                "Insert a message stating that the service couldn't be started, and that the user will have to do it manually");
        }
    }
}

然后,在解决方案资源管理器中,右键单击部署项目并选择“查看 > 自定义操作”。右键单击自定义操作,然后选择“添加自定义操作...” 选择应用程序文件夹并选择包含该服务的项目的主要输出。现在自定义操作(上面的Commit)将在安装时执行。如果您需要其他自定义操作,可以添加其他方法(InstallRollbackUninstall)。

【讨论】:

  • 我不明白?这将如何帮助他将系统帐户设置为服务的执行者?
  • 这就是我从我的项目中复制代码所得到的。 {facepalm} 在我的项目安装程序的Install 方法中,我设置了“帐户”属性。现在已经修好了……
【解决方案4】:
  1. 打开您的 ProjectInstaller
  2. 右键单击 ServiceProcessInstaller 并选择属性
  3. 从“帐户”下拉列表的“其他”下,选择您希望服务运行的帐户

有关不同帐户及其权限的详细信息,请参见以下链接:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

【讨论】:

  • 我在 Misc, VS 2010 下看不到 Account 下拉菜单
  • 他指的是 ServiceProcessInstaller,而不是 ProcessInstaller。
【解决方案5】:

最简单的方法是点击你的 serviceProjectInstaller 并在属性窗口中设置它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多