3

我正在尝试从 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 服务映射网络驱动器?

4

7 回答 7

5

这可以使用对 Windows 脚本宿主对象模型的引用来实现。

添加对Windows 脚本宿主对象模型的 COM 引用,该模型将条目 IWshRuntimeLibrary 添加到引用部分。现在您可以使用以下代码来映射驱动器。

using IWshRuntimeLibrary;

IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("k:",@"\\192.168.20.35\MyShare", Type.Missing, "user1", "password1");

您可以使用以下代码取消映射或删除映射。

network.RemoveNetworkDrive("k:");

我在这里记录了详细的步骤

于 2011-12-08T13:02:03.593 回答
2

通过使用映射网络驱动器 (API)映射网络驱动器解决了所有问题。我在服务的 OnStart 事件时映射所需的驱动器。

于 2009-04-28T09:03:04.717 回答
1

最好只调用正确的 API 函数,而不是调用批处理文件来调用另一个可执行文件。您正在寻找的功能是DefineDosDevice()

于 2009-04-27T10:58:26.647 回答
1

有两个问题:

  1. 映射仅用于用户会话,这意味着您实际上不能将映射驱动器用于服务。您将需要使用路径。
  2. 第二个问题是服务(使用本地系统帐户)无法访问网络,或者更具体地说,无法访问所需的资源。要解决此问题,您需要: 授予运行该服务的“计算机”对该文件夹的特定访问权限,或者,将服务设置为使用有权访问该资源的网络 (DOMAIN) 帐户。
于 2009-04-28T05:47:36.713 回答
0

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

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

于 2009-04-27T09:45:50.410 回答
0

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

于 2009-04-27T09:58:23.127 回答
0

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

这可能是真的,也可能不是真的,但值得研究一下——我记得大约 7 年前的类似情况。

于 2009-04-27T13:00:04.063 回答