Java访问不了共享网络磁盘_关于windows service不能访问网络共享盘(NetWork Drive)的解决方案...

我映射一个网络驱动器到本机的时候,发现本机的程序直接能访问读取网络驱动器,但是把本机的程序作为本机的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工具下载)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中访问共享文件夹需要使用QFile和QDir类,并且需要提供正确的共享文件夹路径和凭据(用户名和密码)。 以下是一个示例代码,可以访问共享文件夹并列出其中的文件和文件夹: ``` c++ #include <QCoreApplication> #include <QFile> #include <QDir> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 共享文件夹路径 QString sharePath = "\\\\192.168.1.100\\share"; // 设置凭据 QFile::setPermissions(sharePath, QFile::ReadOwner | QFile::WriteOwner); QFile::setPermissions(sharePath, QFile::ReadUser | QFile::WriteUser); QFile::setPermissions(sharePath, QFile::ReadGroup | QFile::WriteGroup); QFile::setPermissions(sharePath, QFile::ReadOther | QFile::WriteOther); QFile file(sharePath); file.setPermissions(QFile::ReadOwner | QFile::WriteOwner); file.setPermissions(QFile::ReadUser | QFile::WriteUser); file.setPermissions(QFile::ReadGroup | QFile::WriteGroup); file.setPermissions(QFile::ReadOther | QFile::WriteOther); // 设置用户名和密码 file.setUserName("username"); file.setPassword("password"); // 打开共享文件夹 QDir dir(sharePath); if (!dir.exists()) { qDebug() << "共享文件夹不存在。"; return a.exec(); } dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); QFileInfoList fileList = dir.entryInfoList(); foreach (QFileInfo fileInfo, fileList) { qDebug() << fileInfo.fileName(); } return a.exec(); } ``` 在上面的示例代码中,我们使用`QFile::setPermissions()`和`QFile::setUserName()`和`QFile::setPassword()`函数设置共享文件夹的凭据(用户名和密码)。然后,我们使用`QDir`类打开共享文件夹,并使用`QDir::entryInfoList()`函数列出其中的文件和文件夹。 请注意,此示例代码中的用户名和密码是硬编码的,这是不安全的。在实际应用中,应该将用户名和密码存储在安全的地方,并动态地获取它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值