Windows 認証が有効になっている Web サイトがあります。Web サイトのページから、ユーザーはデータベースを操作するサービスを開始できます。
私はサーバーのローカル管理者であるため、サービスを開始しても問題ありません。しかし、ユーザーにテストしてもらいましたが、サービスを開始できません。
私の質問は:
現在ログインしているアカウントとは異なる Windows アカウントを使用して、指定されたコンピューター上のサービスのリストを名前で取得する方法を知っている人はいますか?
サービスを開始する必要があるすべてのユーザーを Windows グループに追加し、それらすべてを IIS サーバーのローカル管理者に設定したくありません.....
ここに私が持っているコードのいくつかがあります:
public static ServiceControllerStatus FindService()
{
ServiceControllerStatus status = ServiceControllerStatus.Stopped;
try
{
string machineName = ConfigurationManager.AppSettings["ServiceMachineName"];
ServiceController[] services = ServiceController.GetServices(machineName);
string serviceName = ConfigurationManager.AppSettings["ServiceName"].ToLower();
foreach (ServiceController service in services)
{
if (service.ServiceName.ToLower() == serviceName)
{
status = service.Status;
break;
}
}
}
catch(Exception ex)
{
status = ServiceControllerStatus.Stopped;
SaveError(ex, "Utilities - FindService()");
}
return status;
}
私の例外は、try ブロックの 2 行目です。エラーは次のとおりです。
System.InvalidOperationException: コンピューター 'server.domain.com' でサービス コントロール マネージャーを開けません。この操作には、他の権限が必要になる場合があります。---> System.ComponentModel.Win32Exception: アクセスが拒否されました --- 内部例外スタック トレースの終わり --- System.ServiceProcess.ServiceController.GetDataBaseHandleWithAccess(String machineName, Int32 serviceControlManaqerAccess) で System.ServiceProcess.ServiceController.GetServicesOfType(String) でmachineName、Int32 serviceType) で TelemarketingWebSite.Utilities.StartService()
ヘルプ/情報をありがとう