如何从Windows服务映射网络驱动器?
问题描述:
我想网络驱动器从Windows服务地图,我使用批处理文件执行批处理文件,无论是在服务的构造或处理通信事件中执行以下命令如何从Windows服务映射网络驱动器?
NET USE U: \\192.168.55.6\folder password
,驱动器没有映射?
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服务映射网络驱动器?
答
您是否在属于密码的用户帐户下运行服务? MAP USE
命令将使用当前用户,除非您通过/ USER:另一个用户
答
据我所知,映射驱动器只映射用户会话的持续时间。如果您的Windows服务在启动时运行,或者不是用户会话的一部分,则驱动器映射将丢失。
这可能是也可能不是真的,但值得研究 - 我从7年前的一个类似场景中记住了一些事情。
答
这里有两个问题:
- 映射只在使用用户会话,这意味着有效地你不能使用映射驱动器的服务。您需要使用unc路径。
- 第二个问题是服务(使用本地系统帐户) 无法访问网络,或者更具体地说,无法访问所需的资源 。要解决此问题,您需要执行以下任一操作:给 运行服务的“计算机”特定访问 该文件夹,或者设置该服务以使用可访问该服务的网络(DOMAIN)帐户 资源。
答
这可以通过使用对Windows Script Host Object Model的引用来实现。
添加对的Windows引用的Windows脚本宿主对象模型,它向参考部分添加条目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:");
我已经记录的详细步骤here
我不知道为什么你的连接出现故障,但为什么不直接从您的代码进行映射,而非炮击,以NET.EXE? http://pinvoke.net/default.aspx/mpr/WNetAddConnection2.html会给你一个错误代码,这将有助于你进行调试。 – 2009-04-27 10:52:14