プログラムでc#でWindowsサービスを停止すると、以下のリストが生成されますSystem.InvalidOperationException
{アクセスが拒否されました}
Windowsインターフェイスを介して開始/停止すると、すべてが正常に機能します。私は管理者ユーザーであり、Windows7でサービスを実行しています
プログラムでc#でWindowsサービスを停止すると、以下のリストが生成されますSystem.InvalidOperationException
{アクセスが拒否されました}
Windowsインターフェイスを介して開始/停止すると、すべてが正常に機能します。私は管理者ユーザーであり、Windows7でサービスを実行しています
あなたがそれをどのように止めようとしているのかわかりませんが、私は今私のシステムでこれを試しました、そしてこのアプローチは少なくともうまくいきます:
var p = Process.Start(new ProcessStartInfo
{
FileName = "net",
Arguments = "stop NameOfService",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
});
p.WaitForExit(); //add this line if you want to make sure that the service is stopped before your program execution continues
これは UAC の問題のようです。サービスを管理者として制御するアプリケーションを実行してみてください (右クリックして [管理者として実行])。
管理者アカウントであっても、明示的に管理者モードでアプリケーションを実行しない限り、完全な権限を持っていないことに注意してください。これは、Windows Vista で悪意のあるソフトウェアからユーザーを保護するために導入され、それ以来存在しています。
認証が問題の場合...
を使用して、何かをしているユーザーをプログラムで制御できます
WindowsIdentity
と
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(...)
それがうまくいくかどうかはわかりませんが、試してみる価値はあります。
IntPtr token IntPtr.Zero;
LogonUser(username, password ..., ref token) //and some other parameters
var identity = WindowsIdentity(token);
using(identity.Impersonate())
{
//do stuff here using another identity
//find service and stop it
}
編集: これは、リモート サーバーでの認証に使用できます。