Windowsサービスのログオンユーザーをプログラムで変更する必要があります。そして、私はそれを行うには、次のコードを使用しています:Windowsサービスユーザーをプログラムで変更する
string objPath = string.Format("Win32_Service.Name='{0}'", ServiceName);
using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
{
object[] wmiParams = new object[11];
if (PredefinedAccount)
{
wmiParams[6] = "LocalSystem";
wmiParams[7] = "";
}
else
{
wmiParams[6] = ServiceUsername; // provided by user
wmiParams[7] = ServicePassword; // provided by user
}
object invokeResult = service.InvokeMethod("Change", wmiParams);
// handle invokeResult - no error up to this point
}
このコードは、状況の90%で動作しますが、状況によってはサービスにログオンに失敗したため、起動することはできません。そこInvokeMetod上のエラーは、通常ではありませんが、我々は、我々は次のエラーを取得するサービスを開始しようとすると:
System.InvalidOperationException: Cannot start service X on computer '.'. --> System.ComponentModel.Win32Exception: The service did not start due to a logon failure.
回避策ソリューションは単純で、私たちは解決され、Windowsのインターフェイスと問題を経由して同じ資格情報を入力する必要があります。
私の質問は、誰かがManagementObjectで同様の問題を経験したことがあります。これは、状況によってはUsernameとパスワードをWindowsサービスに関連させていないようです。
それはあなたのusingステートメントが原因である場合、私は疑問に思います。私が意味することは、ManagementObjectが完了する前に破棄されることですか?私はWMIに精通していないので、わかりません。 – HVS
ユーザー名とパスワードが入力されているので、私もそこに問題がないか調べます。それらが有効な名前であることを確認してください。 「DOMAIN \ username」はどのシステムでも良いですが、Windows 2000以前では「username @ DOMAIN」は機能しません。 – HVS
私たちは同じ問題を抱えており、サービスがC#、.net 1.1インストールプログラムでインストールされていることを確信しています。私はコマンドライン( 'net start')からサービスを開始し、ログオンに失敗します。不思議なことに、これはマシンにインストールされている7つのサービスのうち2つ(おそらく同じインストールコードを使用している)で発生します。私はそれをまだ診断することはありませんが、マシンは最新のサービスパックを備えたWindows 2003サーバーです。サービスは、C#.net 2.0のコードです。パスワードを手動で入力すると、再起動するまでパスワードが修正されます。 – LegendLength