Windowsに一般ユーザーでログインして、コマンドプロンプトから、
- ログインしたユーザーとは異なるユーザーで、ネットワークドライブを割り当てる。
- ネットワークドライブ上のファイルを処理するプログラムを起動する。
という処理を行いました。
ネットワークドライブの割り当ては、
net use E: \\192.168.1.1\datas\2016 /user:username password /persistent:yes
で行いました。
ネットワークドライブ上のファイルを処理するプログラムを
C:\soft>test.exe 1
で起動すると、
GetLastError():5
が表示されました。
こちらのページによると、GetLastError()の5は、「ERROR_ACCESS_DENIED:アクセスが拒否されました。」とあります。
ir9.jp
ネットワークドライブを割り当てたユーザーと、Windowsにログインしているユーザーが異なります。
そのため、Windowsでログインしたユーザーではネットワークドライブ上のファイルへのアクセスが拒否されているようです。
エクスプローラにEドライブとして表示されていたので、アクセスが拒否されるとは思っていませんでした。
管理者のコマンドプロンプトからならどうなる?
管理者のコマンドプロンプトから同様の手順で処理すると、処理ができました。エクスプローラにEドライブは表示されませんが、アクセスはできています。
一般ユーザーでネットワークドライブを割り当てたわけではないので、エクスプローラには表示されないようです。
photo credit: start via photopin (license)
自動で処理するためには?
Windowsに一般ユーザーでログインして、ログイン時に自動起動して処理をしたいと考えていました。具体的には、スタートアップにネットワークドライブ割り当てとアプリケーション起動のバッチファイルを作成をします。
試しにバッチファイルを作成して実行してみましたが、コマンドプロンプトと同様に上手くいきませんでした。
Windowsの一般ユーザーでは、コマンドプロンプトからの処理で上手くいかなかったので、できない理由も同じなんでしょうね。
自動で処理を実現したかったので、Administratorユーザーを有効にして、Administratorでログインするようにしました。
スタートアップにバッチファイルを作成して実行すると、予定通りの処理ができました。
無効なアカウントを有効にするしかないのか
今回は手っ取り早く目的を達成するためにAdministratorユーザーを有効にしました。.NET Frameworkの機能を確認してアプリケーションを作成すれば、管理者権限で起動させて対処することもできるのかもしれません。