- PR -

Windowsサービスプログラムでネットワークドライブにファイル保存

1
投稿者投稿内容
おおお!?
会議室デビュー日: 2005/02/27
投稿数: 9
投稿日時: 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 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 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/27
投稿数: 9
投稿日時: 2005-02-28 13:14
できました。

ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)