繁体   English   中英

如何从Windows服务映射网络驱动器?

[英]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()

有两个问题:

  1. 映射仅用于用户会话,这意味着您无法有效地使用映射驱动器进行服务。 您需要使用路径。
  2. 第二个问题是服务(使用本地系统帐户)无法访问网络,或者更具体地说,无法访问所需的资源。 要解决此问题,您需要:为服务运行的“计算机”提供对该文件夹的特定访问权限,或者将服务设置为使用可以访问该资源的网络(DOMAIN)帐户。

我认为服务无法映射网络驱动器,除非他们有正确的“与桌面交互”?

尝试在“网络服务”帐户下运行服务,而不是“本地系统”?

您是否在属于密码的用户帐户下运行服务? MAP USE命令将使用当前用户,除非您传递/ USER:anotheruser

据我所知,映射驱动器仅映射用户会话的持续时间。 如果您的Windows服务在启动时运行,或者不是用户会话的一部分,则驱动器映射将丢失。

这可能是也可能不是真的,但值得研究 - 我从大约7年前的类似场景中记得一些事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM