使用InstallUtil默默地设置一个窗口服务登录用户名/密码(Using InstallUtil

2019-07-17 12:57发布

我需要使用InstallUtil安装C#窗口服务。 我需要设置服务的登录凭据(用户名和密码)。 所有这一切都需要被悄悄进行。

是否有办法做这样的事情:

installutil.exe myservice.exe /customarg1=username /customarg2=password

Answer 1:

比的职位上面,并与您的安装没有多余的代码更容易的方法是使用以下命令:

installUtil.exe /用户名=域\用户名/密码,密码= /无人参与C:\ My.exe

只要确保您使用的帐户是有效的。 如果没有,你会收到一个“帐户名和安全的ID之间没有映射已完成”异常



Answer 2:

布拉沃我的同事(布鲁斯·艾迪)。 他找到了一种方法,我们可以使此命令行电话:

installutil.exe /user=uname /password=pw myservice.exe

它是由安装程序类中重写OnBeforeInstall完成:

namespace Test
{
    [RunInstaller(true)]
    public class TestInstaller : Installer
    {
        private ServiceInstaller serviceInstaller;
        private ServiceProcessInstaller serviceProcessInstaller;

        public OregonDatabaseWinServiceInstaller()
        {
            serviceInstaller = new ServiceInstaller();
            serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
            serviceInstaller.ServiceName = "Test";
            serviceInstaller.DisplayName = "Test Service";
            serviceInstaller.Description = "Test";
            serviceInstaller.StartType = ServiceStartMode.Automatic;
            Installers.Add(serviceInstaller);

            serviceProcessInstaller = new ServiceProcessInstaller();
            serviceProcessInstaller.Account = ServiceAccount.User; 
            Installers.Add(serviceProcessInstaller);
        }

        public string GetContextParameter(string key)
        {
            string sValue = "";
            try
            {
                sValue = this.Context.Parameters[key].ToString();
            }
            catch
            {
                sValue = "";
            }
            return sValue;
        }


        // Override the 'OnBeforeInstall' method.
        protected override void OnBeforeInstall(IDictionary savedState)
        {
            base.OnBeforeInstall(savedState);

            string username = GetContextParameter("user").Trim();
            string password = GetContextParameter("password").Trim();

            if (username != "")
                serviceProcessInstaller.Username = username;
            if (password != "")
                serviceProcessInstaller.Password = password;
        }
    }
}


Answer 3:

InstallUtil.exe将StartupType =手册

如果你想自动启动该服务,使用:

sc config MyServiceName start= auto

(注意有有有后成为空间“=”)



Answer 4:

不,installutil不支持。

当然,如果你写一个安装程序; 用自定义操作 ,那么你就可以使用,作为一个MSI的或通过installutil一部分。



Answer 5:

您也可以迫使你的服务中使用ServiceProcessInstaller ::帐户= ServiceAccount.User为用户运行;

一个弹出询问“[域\]用户名,密码”,将服务安装过程中出现。

public class MyServiceInstaller : Installer
{
    /// Public Constructor for WindowsServiceInstaller
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        ServiceInstaller serviceInstaller = new ServiceInstaller();

        //# Service Account Information
        serviceProcessInstaller.Account = ServiceAccount.User; // and not LocalSystem;
     ....


文章来源: Using InstallUtil and silently setting a windows service logon username/password