我们在使用C#.Net Framework 1.1开发的Windows服务中使用以下命令行:
net use z: \\myComputer\c$
Run Code Online (Sandbox Code Playgroud)
该服务在域帐户下运行,该帐户是"myComputer"上的本地管理员.调试代码后,我们可以看到它没有返回任何错误,但"z:"驱动器从未映射.我们已经尝试从控制台应用程序完全相同的代码,它可以正常工作.为了使这项工作,我们需要添加到服务中的是什么?
我们使用的代码包含在下面.
此致,
塞尔吉奥
startInfo.FileName = "net";
startInfo.Arguments = string.Format(@"use {0}: \\{1}\{2}", driveLetter,
computerName, folder).Trim();
startInfo.UseShellExecute = false;
startInfo.RedirectStandardError = true;
proc.EnableRaisingEvents = false;
proc.StartInfo = startInfo;
proc.Start();
// If there is an error during the mapping of the drive, it will be read
// from the StandardError property which is a StreamReader object and
// be fed into the error output parameter.
using(StreamReader errorReader = proc.StandardError)
{
string standardError = string.Empty;
while((standardError = errorReader.ReadLine()) != null)
{
error += standardError + " ";
}
}
proc.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
Mic*_*urr 17
来自http://msdn.microsoft.com/en-us/library/ms685143.aspx:
必须访问远程资源的服务(或在不同安全上下文中运行的任何进程)应使用通用命名约定(UNC)名称来访问资源.该服务必须具有访问资源的适当权限.如果服务器端服务使用RPC连接,则必须在远程服务器上启用委派.
驱动器号不是系统的全局信件.每个登录会话都会从A到Z接收自己的一组驱动器号.因此,在不同用户帐户下运行的进程之间无法共享重定向的驱动器.此外,服务(或在其自己的登录会话中运行的任何进程)无法访问在不同登录会话中建立的驱动器号.
服务不应该通过映射的驱动器号直接访问本地或网络资源,也不应该在运行时调用net use命令来映射驱动器号.
| 归档时间: |
|
| 查看次数: |
11102 次 |
| 最近记录: |