我映射一個網絡驅動器到本機的時候,發現本機的程序直接能訪問讀取網絡驅動器,但是把本機的程序作為本機的windows服務運行的時候就不能訪問了。
Qt中的QDir::exist(folder)訪問失敗。這樣導致的原因是映射網絡驅動器,需要服務程序運行的權限賬戶和遠程共享文件的機器要運行在同一個域(Domain)
下面,用PStool這個工具就可以了,它直接使用SYSTEM賬戶權限,來映射網絡驅動器。這樣,遠程驅動器和本機的service就處於同一個域下了。
注意:這個是比較hack的做法,並不推薦這么做。微軟是不支持的。
1.用psexec創建網絡驅動器:
admin 權限運行CMD,然后運行psexec -i -s cmd.exe
然后在新打開的CMD窗口中運行以下命令映射網絡驅動器Z盤, net use z: \\server_ip\share_folder /persistent:yes
以上的net命令可能會讓你輸入遠程的系統用戶名和密碼,我的遠程是XP,所以用戶名密碼是:Administrator/無密碼
注: 所有微軟的Windows 系統默認管理員用戶都是Administator 而密碼是你自己設定的,系統沒有默認密碼
2.運行本機windows服務,成功訪問網絡驅動器Z
references:
http://stackoverflow.com/questions/18632193/directory-exists-returns-false-for-mapped-drive-in-c-sharp-coding
http://stackoverflow.com/questions/3622089/windows-service-cant-access-network-share
http://serverfault.com/questions/177139/windows-service-cant-access-network-share
http://stackoverflow.com/questions/182750/map-a-network-drive-to-be-used-by-a-service
https://technet.microsoft.com/en-us/sysinternals/psexec (PStool工具下載)