[英]How does one map network drive from windows service?
我正在尝试从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服务映射网络驱动器?
这可以使用对Windows脚本宿主对象模型的引用来实现。
向Windows脚本宿主对象模型添加COM引用,该引用将IWshRuntimeLibrary条目添加到引用部分。 现在,您可以使用以下代码映射驱动器。
using IWshRuntimeLibrary;
IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("k:",@"\\192.168.20.35\MyShare", Type.Missing, "user1", "password1");
您可以使用以下代码进行UnMap或删除映射。
network.RemoveNetworkDrive("k:");
我已在此处记录了详细步骤
通过使用地图网络驱动器(API)映射网络驱动器解决了所有问题。 我在OnStart服务事件中映射所需的驱动器。
最好只调用正确的API函数,而不是调用批处理文件来调用另一个可执行文件。 你正在寻找的功能是DefineDosDevice()
有两个问题:
我认为服务无法映射网络驱动器,除非他们有正确的“与桌面交互”?
尝试在“网络服务”帐户下运行服务,而不是“本地系统”?
您是否在属于密码的用户帐户下运行服务? MAP USE
命令将使用当前用户,除非您传递/ USER:anotheruser
据我所知,映射驱动器仅映射用户会话的持续时间。 如果您的Windows服务在启动时运行,或者不是用户会话的一部分,则驱动器映射将丢失。
这可能是也可能不是真的,但值得研究 - 我从大约7年前的类似场景中记得一些事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.