C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: Windowsサービスからバッチファイルを呼び出したい


(過去ログ 88 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■52429 / inTopicNo.1)  Windowsサービスからバッチファイルを呼び出したい
  
□投稿者/ tama (1回)-(2010/08/09(Mon) 13:32:36)

分類:[.NET 全般] 

[環境]
VisualStudio2005
.NetFramework2.0
vb.net

はじめまして、上記の環境でWindowsサービスを作成しています。
その中でバッチファイルを呼び出したいのですが、バッチファイルが動いている形跡がありません。

----<一部抜粋>
Shell("cmd.exe /C C:\SampleBat.bat")

単純にこれでは起動されないのでしょうか。
尚、以下も試しましたが結果は同じでした。

----<一部抜粋>
Dim a As New Process
a.StartInfo.FileName = "C:\SampleBat.bat"
a.Start()

----<ProjectInstaller.vb>
Account:LocalService


Windowsサービスの設定項目に不備があるのか、コードに不備があるのか
ご教授いただけませんでしょうか。



引用返信 編集キー/
■52430 / inTopicNo.2)  Re[1]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ 渋木宏明 (35回)-(2010/08/09(Mon) 14:09:20)
渋木宏明 さんの Web サイト
> Windowsサービスの設定項目に不備があるのか、コードに不備があるのか
> ご教授いただけませんでしょうか。

とりあえず、どんな例外が発生しているのか、ログファイルなどに記録してみては?
引用返信 編集キー/
■52431 / inTopicNo.3)  Re[2]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ tama (3回)-(2010/08/09(Mon) 14:19:59)
No52430 (渋木宏明 さん) に返信

渋木宏明 様

はじめまして、アドバイス有難うございます。
バッチファイルの末尾にpauseを設定して、
AccountをLocalSystemに設定して「デスクトップとの対話をサービスに許可」にすると、
バッチファイルの中で、PsToolsのコマンドで「アクセスが拒否されました」と
出ている事が判明致しました。
もう少し調べてみます。
有難うございました。

引用返信 編集キー/
■52432 / inTopicNo.4)  Re[3]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ かたぎり (41回)-(2010/08/09(Mon) 14:37:12)
Windowsサービスをどのユーザー権限で使用してますか?

権限によってできることがかなり制限されるので
バッチファイルを動かすのであれば、
専用のユーザーを作ってそのユーザーでサービスを起動させて
バッチにも実行権限をあたえてあげないと、うまくいかないかもです。

引用返信 編集キー/
■52436 / inTopicNo.5)  Re[4]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ tama (6回)-(2010/08/09(Mon) 15:37:36)
No52432 (かたぎり さん) に返信

かたぎり 様

 はじめまして、アドバイス有難うございます。
 現在ローカルシステムアカウント以外のアカウントで実行すると
 batファイルが全く起動していない様子です。
 batファイルを直接ダブルクリックすると、ネットワーク越しのexeを
 起動する事が出来ますので、batファイル自体の実行権限は問題ないような気がしております。
 もう少し調べてみます。
 有難うございます。
 
 
引用返信 編集キー/
■52437 / inTopicNo.6)  Re[5]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ aetos (323回)-(2010/08/09(Mon) 16:19:59)
No52436 (tama さん) に返信
> ネットワーク越しのexeを

ひょっとしてマップしたネットワークドライブ上の exe を実行しようとしていたり?
ネットワークドライブの設定はユーザーアカウントごとですよ。
引用返信 編集キー/
■52442 / inTopicNo.7)  Re[6]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ tama (8回)-(2010/08/09(Mon) 17:34:40)
No52437 (aetos さん) に返信

aetos 様

 はじめまして、アドバイス有難うございます。
 ネットワークドライブの設定につきましては、batファイル内のPsToolsで
 ユーザーを設定しておりますので、問題無いかと思っております。
 
 当初アカウントを色々と変更しながらサービスを開始していたのですが、
 なかなかうまく行かず、かたぎり 様からのアドバイスを元に指定したアカウントの権限付与を
 変更(Network Configuration Operatorsを追加)してみたところ、アタッチの際警告メッセージが表示されるようになり、
 ネットワークの先にあるexeを呼び出す事が出来る様になりました。
 前回の設定情報がキャッシュされていたのでしょうか。
 その後、追加した(Network Configuration Operators)を削除してマシンを再起動後サービスを開始したところ
 正常にネットワークにアクセスする事が出来ました。
 (Network Configuration Operatorsを追加しても意味が無かったと思われますが、この変更で前回の情報が
 クリアされたように思います。)

 この度は本当に助かりました。本当に有難うございました。
 
 
解決済み
引用返信 編集キー/
■52454 / inTopicNo.8)  Re[7]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ ちゃっぴ (35回)-(2010/08/10(Tue) 01:33:05)
ちゃっぴ さんの Web サイト
>  (Network Configuration Operatorsを追加しても意味が無かったと思われますが、この変更で前回の情報が
>  クリアされたように思います。)

これは全く関係無いですね。

可能性として考えられるのは service account ですね。
もともと NT Authority\System を利用していて remote host に配置している batch file を呼び出しているとのことなので、それが問題です。
NT Authority\System は remote に接続しにいく場合 null session で接続しにいきますので。

Remote host との連携が必要な場合には、NT Authority\Network Service (この場合 computer account で接続) もしくは Domain account を指定する必要があります。
また、Windows service account に NT Authority\System を使用することは security 観点から推奨されていません。

あと、今回 network drive を利用しているとのことですが、network drive の設定は user 毎の設定です。
Windows Service のように user に依存するべきではないものでの利用は不適切です。

私が推奨する方法を下記にまとめます。

・ Windows Service からの cmd.exe の呼び出しは行わない。
Process の起動はできるだけ避けたほうがよいですが、どうしようも無い場合でも batch file の呼び出しは避け、直接 process を起動するようにする。

・ NT Authority\System は利用しない
Service を起動する account を別途作成するか、NT Authority\Network Service もしくは NT Authority\Local Service を利用するようにします。

・ 呼び出す program は local に配置するようにする
Coding したものはできる限り local に配置するようにします。Data file を remote host に配置するのはかまいません。

・ Network drive は利用せず UNC を利用する
Network drive は per user の設定であるため、Windows service からの利用は不適切です。\\hostname\sharname のような UNC を利用しましょう。


引用返信 編集キー/
■52466 / inTopicNo.9)  Re[8]: Windowsサービスからバッチファイルを呼び出したい
□投稿者/ tama (9回)-(2010/08/10(Tue) 11:32:48)
No52454 (ちゃっぴ さん) に返信

ちゃっぴ 様

 はじめまして、詳細なアドバイスを有難うございます。
 ちゃっぴ 様のアドバイスを元に、まず起動ユーザーを別途作成致しました。
 また、ローカルに呼び出すプログラムを配置し、それを直接process起動する様修正致しました。
 呼び出すプログラムが使用するファイルだけは置き場所が決まっており、サービス側でそのファイルを配置する際に
 ネットワークドライブを使用せずにUNCにて設定する様に致しました。
 ご指摘頂きまして、本当に有難うございました。



 
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -