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

質問
-
誤ったアカウントが設定された場合、エラーメッセージを表示させるにはどうすればよいでしょうか?
// アカウントを設定(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に誤ったアカウントが設定されている場合、
そのまま進んでログオンに「ローカルシステムアカウント」が設定されてしまいます。
すべての返信
-
こんばんは!(^^)!ふ~です。
この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#から外部プログラムを使おう
-
!(^^)!ふ~ さんからの引用 >誤ったアカウントが設定された場合、エラーメッセージを表示させるにはどうすればよいでしょうか?
『sc』の中で、起動パラメータを受け取り、誤ったアカウントが設定されたかどうかを判断し、エラーメッセージ処理を追加する事になります。
scってシステムコマンドですよね。( http://support.microsoft.com/kb/251192/ja )
それに対して処理の追加はできないのでは?
※c:\windows\system32\sc.exeに存在する。
元の質問に対しては回答できるだけの持ちネタがないのですが、scコマンドでは実現できないのかも知れません。
ChangeServiceConfig等のAPIを使えば失敗が分かるのかも知れません。(未確認) -
こんにちは!(^^)!ふ~です。
>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.html2.レジストリやサービス コントロール マネージャのデータベース中にあるサービスのエントリの値を修正する
http://win-cmd.seesaa.net/article/86920522.html3.SC.exe コマンドが返されるエラー メッセージ: ChangeServiceConfig 失敗、rc 87 =
http://support.microsoft.com/kb/264663/ja