- - PR -
Windowsサービスプログラムでネットワークドライブにファイル保存
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-27 18:59
こんにちは
大変困っています。 C言語にてWindowsサービスプログラムを作成しています。 [サービスプログラムの処理内容] Windowsサービスはローカルにあるプロセス(A.exe)を起動します。 起動されたプロセスは、ローカルに有るネットワークドライブ(Z:) にファイルを保存したいのですが、Windowsサービスに登録し、実行すると エラー番号3(指定されたパスが見つかりません。)とエラーになり 書き込みができません。しかし、サービスからではなく、自分でA.exeを クリックにて実行すると、正常にファイルが書き込めます。 いろいろ調べて、サービスはSTSTEMアカウントにて起動されるので、 アカウントを指定し、admini権限のユーザにて起動させるように、 しましたが無理でした。直接ネットワークパスを指定してもエラー番号53(ネットワークパスが見つかりません)といわれました。 [ファイルの書き込みソース] driveは設定ファイルより取得(Z:) a.htmというファイルをネットワークドライブ(z:\)に保存 // ファイル名作成 sprintf(filename,"%s\\%s",drive,a.htm); /*--------------------------------------*/ /* ファイルオープン処理 */ /*--------------------------------------*/ if ( ( fd = CreateFile(filename ,GENERIC_READ|GENERIC_WRITE ,FILE_SHARE_READ|FILE_SHARE_WRITE ,NULL ,CREATE_ALWAYS ,FILE_ATTRIBUTE_NORMAL ,NULL) ) == INVALID_HANDLE_VALUE ) { return(-1); } プロセス実行パソコン:WindowsServer2003 ネットワークドライブ先パソコン:WindowsServer2003 なんで、クリックにより起動した場合は、書き込めるのに、 サービスだったら書き込めないのでしょうか? [ メッセージ編集済み 編集者: おおお!? 編集日時 2005-02-27 19:01 ] | ||||
|
投稿日時: 2005-02-28 00:19
「ネットワークドライブ」が「ユーザ毎の設定」でしかないからです。 あなたのログオンセッションで設定されている「Z: ドライブ」は、あなただけの設定で、それがサービスの実行アカウントに反映されることはありません。 サービスからネットワークリソースへのアクセスが必要なら、明示的に WNetAddConnection3() しましょう。 また、デフォルト構成では SYSTEM アカウントにはネットワーク資源に対するアクセスが許可されていないので、ネットワーク資源にアクセスするサービスを実行するなら、それ専用の適切な権限を設定したアカウントを作成し、そのアカウントでサービスを実行するのが望ましいでしょう。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2005-02-28 13:14
できました。
ありがとうございます。 |
1