我需要使用InstallUtil安装C#窗口服务。 我需要设置服务的登录凭据(用户名和密码)。 所有这一切都需要被悄悄进行。
是否有办法做这样的事情:
installutil.exe myservice.exe /customarg1=username /customarg2=password
我需要使用InstallUtil安装C#窗口服务。 我需要设置服务的登录凭据(用户名和密码)。 所有这一切都需要被悄悄进行。
是否有办法做这样的事情:
installutil.exe myservice.exe /customarg1=username /customarg2=password
比的职位上面,并与您的安装没有多余的代码更容易的方法是使用以下命令:
installUtil.exe /用户名=域\用户名/密码,密码= /无人参与C:\ My.exe
只要确保您使用的帐户是有效的。 如果没有,你会收到一个“帐户名和安全的ID之间没有映射已完成”异常
布拉沃我的同事(布鲁斯·艾迪)。 他找到了一种方法,我们可以使此命令行电话:
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;
}
}
}
InstallUtil.exe
将StartupType =手册
如果你想自动启动该服务,使用:
sc config MyServiceName start= auto
(注意有有有后成为空间“=”)
不,installutil不支持。
当然,如果你写一个安装程序; 用自定义操作 ,那么你就可以使用,作为一个MSI的或通过installutil一部分。
您也可以迫使你的服务中使用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;
....