应用程序做成服务启动后不能访问网络共享磁盘,如是在网上找了些资料,下面是网上的资料:
我映射一个网络驱动器到本机的时候,发现本机的程序直接能访问读取网络驱动器,但是把本机的程序作为本机的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工具下载)
下面是我个人的笔记:
1.首先把psexec.exe文件拷贝到c:/windows/system32路径下面;
2.用psexec创建网络驱动器:
admin 权限运行CMD,然后运行psexec -i -s cmd.exe
3.在新打开的cmd命令窗口运行网络驱动器Z盘,命令:net use z: \\server_ip\share_folder /persistent:yes
net use z: \\172.17.134.124\test /persistent:yes
执行完上面命令,需要输入登录账户和密码,账户是administrator,注意上面命令有两个空格,盘符z:后面
有一个空格,共享文件夹后面后一个空格。
4.执行完后,在cmd命令窗口已经可以访问共享磁盘了,可以输入z: 回车看看能不能访问。到这里已经完成。
5.可是在我的电脑在并不能看到z的盘符,或者看到了z的盘符,但并不能连接进去,操作起来不方便,可以按
之前映射网络磁盘的方式再映射一次,右击我的电脑->映射网络磁盘驱动器->输入用户名密码,连接后,既可以
应用程序或者windows server访问共享文件夹,也可以在我的电脑里面直接双击查看共享文件夹。