none
Processクラスを使ってサービスのアカウントを設定しているのですが RRS feed

  • 質問

  • 誤ったアカウントが設定された場合、エラーメッセージを表示させるにはどうすればよいでしょうか?

    // アカウントを設定(scコマンドを使って設定する)
    Process process = new Process();
    process.StartInfo.FileName = "sc";
    process.StartInfo.Arguments = "config \"TestSerivice\" obj= "+userDialog.User+" password= "+userDialog.Pwd;
    process.StartInfo.WindowStyle = ProcessWindowStyle.Normal.Minimized;
    process.Start();
    process.WaitForExit();


    このとき
    userDialog.UserとuserDialog.Pwdに誤ったアカウントが設定されている場合、
    そのまま進んでログオンに「ローカルシステムアカウント」が設定されてしまいます。
    2008年12月10日 6:30

すべての返信

  • こんばんは!(^^)!ふ~です。

     

    このProcessクラスは、ご参考資料にもございますが、普通、以下のように使われるのですね。

     

    string program = @"C:\Program Files\Internet Explorer\IEXPLORE.EXE";

    string argument = @"http://mobiquitous.com/";

    Process extProcess = new Process();
    extProcess.StartInfo.FileName = program; //起動するファイル名
    extProcess.StartInfo.Arguments = argument; //起動時の引数
    extProcess.Start();    //プロセス開始

    >このときuserDialog.UserとuserDialog.Pwdに誤ったアカウントが設定されている場合、
    >そのまま進んでログオンに「ローカルシステムアカウント」が設定されてしまいます。

     

    たぶん、コマンドプロンプトで >SC  config\TestSerivice\  obj= "XXXXXXX”  password= "XXXXXXXX”

    などとコマンド入力しても動作すると思われます。(多少工夫が必要ですが)

     

    という事になりますと、当然、『sc』はプログラムと考えられます。つまり、このプログラムの中で、起動

    パラメータに、userDialog.UserとuserDialog.Pwdを受け取り、パラメータが無効であると判断すると、

    デフォルトの『ローカルシステムアカウント』を使いログオンするように設計されている分けです。

     

    >誤ったアカウントが設定された場合、エラーメッセージを表示させるにはどうすればよいでしょうか?

    『sc』の中で、起動パラメータを受け取り、誤ったアカウントが設定されたかどうかを判断し、エラーメッセージ

    処理を追加する事になります。

     

    ◇ご参考資料

    C#から外部プログラムを使おう

    http://mobiquitous.com/programming/process.html

    2008年12月17日 14:49
  •  !(^^)!ふ~ さんからの引用

    >誤ったアカウントが設定された場合、エラーメッセージを表示させるにはどうすればよいでしょうか?
    『sc』の中で、起動パラメータを受け取り、誤ったアカウントが設定されたかどうかを判断し、エラーメッセージ

    処理を追加する事になります。

    scってシステムコマンドですよね。( http://support.microsoft.com/kb/251192/ja )

    それに対して処理の追加はできないのでは?

     

    ※c:\windows\system32\sc.exeに存在する。

     

     

     

     

    元の質問に対しては回答できるだけの持ちネタがないのですが、scコマンドでは実現できないのかも知れません。

    ChangeServiceConfig等のAPIを使えば失敗が分かるのかも知れません。(未確認)
    2008年12月17日 15:29
    モデレータ
  • こんにちは!(^^)!ふ~です。

     

    >scってシステムコマンドですよね

     

    Azuleanさん、どうも有難うございました。

    「SC はサービス コントロール マネージャやサービスと通信するために使用
    するコマンドライン プログラムです。」。。。。。。これですね。

     

    要するに、「SCコマンドの使い方で、パラメータのアカウント値を間違えて指定した場合にエラー表示したい」

    と言うことで良いのでしょうかね?

     

    sc [コンピュータ名] config [サービス名] [オプション名= 値]
    >sc config \"TestSerivice\" obj= "+userDialog.User+" password= "+userDialog.Pwd;

    TestSeriviceと言いますサービスが起動した時に、obj="xxxxx" と password="xxxxxx"

    の正当性を調査し、エラー表示するか、エラー番号を返すような処理を追加する事は出来る

    のではないかと思います。

     

    >そのまま進んでログオンに「ローカルシステムアカウント」になる

     

    2.の参考資料より

    オプション:obj
    サービスが実行されるアカウントの名前か、ドライバが実行されるWindowsドライバオブジェクトの名前を指定する。既定値はLocalSystem

     

    オプション:password
    パスワードを指定する。LocalSystemアカウント以外のアカウントを使用する場合に必要。

     

    <疑問点>

    1.sc configの処理は、登録されていないアカウントは無効で、LocalSystemアカウントとなる?

    2.サービスのアカウントの正当性は、scコマンドを使う前に、チェックする。(別のコマンドで?)

     

    ◇ご参考資料

    1.sc.exeでサービスをコマンドラインから制御する
    http://www.atmarkit.co.jp/fwin2k/win2ktips/400svchost/svchost.html

     

    2.レジストリやサービス コントロール マネージャのデータベース中にあるサービスのエントリの値を修正する
    http://win-cmd.seesaa.net/article/86920522.html

     

    3.SC.exe コマンドが返されるエラー メッセージ: ChangeServiceConfig 失敗、rc 87 =

    http://support.microsoft.com/kb/264663/ja

     

    2008年12月17日 16:45