我正在尝试从Windows服务映射网络驱动器,我使用批处理文件执行以下命令
NET USE U: \\192.168.55.6\folder password
在服务构造函数或onstart事件中执行批处理文件时,是否未映射驱动器?
Process process = new Process();
process.StartInfo.FileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\MAP.BAT";
process.StartInfo.CreateNoWindow = false;
process.Start();
如何从Windows服务映射网络驱动器?
答案 0 :(得分:5)
这可以使用对Windows脚本宿主对象模型的引用来实现。
向 Windows脚本宿主对象模型添加COM引用,该引用将IWshRuntimeLibrary条目添加到references部分。现在,您可以使用以下代码映射驱动器。
using IWshRuntimeLibrary;
IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("k:",@"\\192.168.20.35\MyShare", Type.Missing, "user1", "password1");
您可以使用以下代码进行UnMap或删除映射。
network.RemoveNetworkDrive("k:");
我已经记录了详细步骤here
答案 1 :(得分:2)
使用Map Network Drive (API)映射网络驱动器解决了所有问题。我在OnStart服务事件中映射了所需的驱动器。
答案 2 :(得分:1)
最好只调用正确的API函数,而不是调用批处理文件来调用另一个可执行文件。您正在寻找的功能是DefineDosDevice()
答案 3 :(得分:1)
有两个问题:
答案 4 :(得分:0)
我认为服务无法映射网络驱动器,除非他们有正确的“与桌面交互”?
尝试在“网络服务”帐户下运行服务,而不是“本地系统”?
答案 5 :(得分:0)
您是否在属于密码的用户帐户下运行服务?除非您传递/ USER:anotheruser
,否则MAP USE
命令将使用当前用户
答案 6 :(得分:0)
据我所知,映射驱动器仅映射用户会话的持续时间。如果您的Windows服务在启动时运行,或者不是用户会话的一部分,则驱动器映射将丢失。
这可能是也可能不是,但值得研究 - 我记得7年前的类似情况。