2011-07-08 67 views
4

Visual Studioを使用してC#Webサービスを作成して、SMTPSVCというWindowsサービスの簡易メール転送プロトコル(SMTP)を停止しました。C#Windowsサービスを停止しようとするとアクセスが拒否されました

次はそれを行うためのWebメソッドである:

[WebMethod] 
public string StopService() 
{ 
    String status = ""; 
    try 
    { 
     ServiceController scAlerter = new ServiceController("SMTPSVC"); 

     Console.WriteLine(scAlerter.DisplayName); 
     Console.WriteLine(scAlerter.CanStop); 

     scAlerter.Stop(); 
     Console.WriteLine("Service stopped"); 
     status = "STOPPED"; 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("Exception caught here" + e.ToString()); 
     status = "Exception" + e.ToString(); 
    } 
    return status; 
} 

私は私のIIS 5.1サーバーでは、このWebサービスを公開しました。私は次のサービスは、ユーザーアカウントIUSER_system-nameを使用していると私はシステム管理者グループにこのユーザアカウントを追加しても、中ASPNETユーザーアカウントを追加したデフォルトで

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://y-square.org/"> 
    ExceptionSystem.InvalidOperationException: Cannot open SMTPSVC service on 
    computer '.'. ---> System.ComponentModel.Win32Exception: Access is denied 
    --- End of inner exception stack trace --- at 
    System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) 
    at System.ServiceProcess.ServiceController.Stop() at Service.RestartService() 
    in c:\Inetpub\wwwroot\RestartService\App_Code\Service.cs:line 38 
</string> 

を例外「をアクセスが拒否されました」投げているサービスを起動した場合管理者グループ。

私はこのWindowsサービスをC#standaloneプログラムから正常に停止/開始することができました。

問題の原因を教えていただけますか?これを実行するには、どのアクセス許可設定またはIISユーザーアクセス権を変更する必要がありますか?

また、このC#サービスがWindowsサービスを停止するために使用するユーザーアカウントを教えてください。

お手数をおかけします。事前に

おかげで、 ヨギ

答えて

5

アカウントIUSER_machinename(以下では略してIUSER、)は、ゲストアカウントより少し権限で、正当な理由のために、比較的限定されたアカウントです。 Windowsサービスを開始したり停止したり、(ステータスなどを取得するために)問い合わせをすることさえできません。
スタンドアロンEXEのコンテキストで実行すると、上記のロジックは、基礎となるアカウントがAdministratorsグループのメンバーである可能性が高いか、またはいずれにしてもかなり強力なアカウントであるため、成功します。

簡単ですが、この状況から外れた方法は、IUSERアカウントにもっと多くの特権を与えることです。このアカウントを管理者グループbam!に追加しようとすると、うまくいくでしょう(ただし、危険なセキュリティホールが導入される可能性もあります)。
A より良いアプローチは、IISによって管理される特定のWindowsサービスの明示的なリストを作成し、個々のサービスセキュリティ記述子を設定して、IUSERアカウント(または別のアカウント/グループ必要に応じて、それらを開始および/または停止させることができる。
私の知る限りでは、サービスのセキュリティ記述子を検査して変更するためのGUIや直感的な管理ツールはありません。SDDを使用してSDDL言語を "習得"する必要があります。ここで私は、コントロールパネル/ユーザーを使用して、システム管理者グループにIUSERアカウントを追加しようとしているお返事、 ためので

+0

感謝を行うにはいくつかのポインタですアカウントアプリケーションですが、私は同じ例外が発生しています。 IISサーバーで行う必要があるその他の構成はありますか?仮想ディレクトリのようなプロパティなど – Yogi

+0

@ Yogi。私は仕事で忙しく、Windowsマシンにアクセスせずに物をチェックしています。私はまだこれが重要な許可やセキュリティポリシーの設定だと考えています。診断目的のために、IUSERアカウントの代わりにスタンドアロンアプリケーションとしてコードを実行し、このコードが動作するかどうかを確認するために使用されるアカウントを一時的にIISに使用させます。また、この質問をhttp://serverfault.com QAサイトに送ることもできます.SYS管理者は、実際にはコードの問題ではなく設定上の問題であると思われるものを助けるためのより良い立場にあるためです。 – mjv

+0

@mfv:システムの再起動のために、おそらく管理者グループにIUSRアカウントを追加した時点で作業が開始されました。 あなたの助けをたくさんありがとう 乾杯、 ヨギ – Yogi

関連する問題