2

我想在 Windows 服务内的网络驱动器上映射一个清晰的视图。
我试过用net use命令,但它不能正常工作。

4

2 回答 2

2

您应该能够运行与路径太长时使用的命令相同的命令,即subst

subst X: c:\path\to\my\View # for snapshot view
subst X: M:\myView # for dynamic view

为了将视图映射到驱动器号。

这应该在服务中工作,前提是:

  • 您正在使用您的 Windows 帐户(而不是“本地系统帐户”)
  • 动态视图已经启动(并且在M:\ MVFS安装点驱动器中可见)
于 2010-02-24T08:59:38.013 回答
1

我希望这种方法能奏效,但它确实不是来自服务;我已经非常激烈地解决了这个问题,但无济于事。问题有两个方面:

  1. 从 Windows 服务中,为了能够映射其他用户可见的驱动器,它必须以“本地系统”帐户(默认)“登录”并设置“与桌面交互”属性。
  2. 为了能够与 ClearCase 对话,Windows 服务进程必须以具有 ClearCase 访问权限的普通用户身份“登录”(例如,通常在 atria 组中)。

所以(1)和(2)是互斥的,但是你需要两者都做,不能。对于(2),您无法“与桌面交互”和映射驱动器的原因可能是因为您需要一个登录会话/令牌,必须存在该登录会话/令牌才能使映射的驱动器工作-关联的每用户会话- - 但是服务需要能够在不存在“会话”/令牌的情况下无头运行(没有人登录)。

请注意,Rational BuildForge 为 ClearCase 解决此问题的方式是生成一个全新的子进程,仅允许其服务与 ClearCase 对话:

另请注意,“登录会话”由唯一令牌标识;这意味着即使您有一个可以访问 ClearCase 的所需用户(域\fred)运行的进程,从那里生成一个新进程作为相同的用户(域\fred)默认情况下可能没有相同的会话令牌,具体取决于关于它是如何创建的(即 CreateProcess() vs CreateProcessAsUser() vs CreateProcessWithLogonW()),这使得处理您无法控制的工具变得更加困难。为了证明这一点,请尝试从命令提示符运行 'runas /user: "cmd /k \"net use\""',您会看到所有网络驱动器都列为“不可用”(!!)。

如果您能够以某种方式设法让用户始终登录以获取其会话令牌,则可以(尽管 Microsoft 明确不推荐)努力使这一切正常工作,如下所述:

从非交互式服务 (win32/.net/powershell) 启动 UAC 提升进程

否则,您必须像 BuildForge 那样模拟它。

另见:

对于这类问题,我通常会使用作为 Windows 服务运行的 CI 服务器(CC.NET / Hudson / TeamCity)遇到它。我必须做的是确保在我真正的“工作”开始之前的某个地方,我编写了一种映射网络驱动器的方法,方法是在运行时重新映射它们或将 M:\ 映射到带有 subst 的可用驱动器号(非常乏味) 正如 VonC 所描述的那样,这不是持久的(即使您使用 'net use /persistent:yes'),我猜这也是您所希望的。

于 2011-12-12T22:13:49.163 回答