【问题标题】:"net use" command in a Windows ServiceWindows 服务中的“net use”命令
【发布时间】:2008-11-11 19:46:38
【问题描述】:

我们在使用 C# .Net Framework 1.1 开发的 Windows 服务中使用以下命令行:

net use z: \\myComputer\c$

该服务在“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();  

【问题讨论】:

    标签: .net windows-services


    【解决方案1】:

    来自http://msdn.microsoft.com/en-us/library/ms685143.aspx

    服务(或任何运行在 不同的安全上下文),必须 访问远程资源应该使用 通用命名公约 (UNC) 访问资源的名称。这 服务必须有适当的 访问资源的权限。如果 服务器端服务使用 RPC 连接,必须启用委派 在远程服务器上。

    驱动器号不是全局的 系统。每个登录会话接收 它自己的一组驱动器号从 A 到 Z. 因此,重定向驱动器不能 在运行的进程之间共享 在不同的用户帐户下。 此外,服务(或任何进程 在自己的登录会话中运行) 无法访问驱动器号 建立在不同的 登录会话。

    服务不应直接访问 本地或网络资源通过 映射的驱动器号,也不应该 调用 net use 命令映射驱动器 运行时的字母。

    【讨论】:

      【解决方案2】:

      您无法从 Windows 服务(包括注册表中的 HKEY-CURRENT-USER)访问用户属性,因为该服务未作为登录用户运行。

      映射的驱动器是用户设置的一部分,因此您不能将它们用作服务,除非您手动挖掘注册表中的用户属性、映射服务中的驱动器等。这很痛苦。

      您可能想要尝试并做的是询问有关如何让您的服务执行登录序列(可能是一些 .EXE)的问题。这可能对你有用。

      希望这会有所帮助, 艾伦。

      【讨论】:

        【解决方案3】:

        您可能需要指定用于登录的帐户。在命令提示符下键入 net use /? 以获得使用命令设置的帮助。

        【讨论】:

          【解决方案4】:

          我怀疑这是因为服务没有在本地用户的上下文中运行。我记得,您可以将多年前的 Windows 服务配置为“与桌面交互”或类似的东西。

          【解决方案5】:

          我正在做类似于登录远程服务器的操作,但没有映射驱动器部分。我不喜欢使用映射驱动器;也就是说,在程序中,我一直使用 subst 来方便。 无论如何,我只需要确保包括

          use \\server\c$ /user:admin password
          

          或者无论您的用户/密码是什么,可以访问远程服务器,那么服务以什么身份登录都没有关系。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 1970-01-01
            • 2023-03-16
            相关资源
            最近更新 更多