如何在Windows服务中映射Clearcase View的网络驱动器?

时间:2010-02-24 08:39:24

标签: windows-services networking clearcase drive

我想在Windows服务中映射网络驱动器上的clearcase视图 我尝试使用net use命令,但它无法正常工作。

2 个答案:

答案 0 :(得分:1)

您应该能够运行与used when paths are too long相同的命令,即 subst

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

以便将视图映射到驱动器号。

这应该在服务中起作用,提供:

  • 您使用的是Windows帐户(而不是“本地系统帐户”)
  • 动态视图已启动(并在M:\ MVFS安装点驱动器中可见)

答案 1 :(得分:1)

我希望这种方法能够奏效,但它确实不是来自服务;我已经非常激烈地击败了这个问题而无济于事。问题是双重的:

  1. 从Windows服务中,为了能够将可见的驱动器映射到其他用户,必须将“登录”作为“本地系统”帐户(默认)并使用“与桌面交互”属性集。
  2. 为了能够与ClearCase交谈,Windows服务进程必须以具有ClearCase访问权限的普通用户“登录”(例如,通常在atria组中)。
  3. 所以(1)和(2)是相互排斥的,但你需要做两件事而不能做。对于(2),大概是你不能“与桌面交互”和映射驱动器的原因是因为你需要一个登录会话/令牌,它必须存在才能使映射的驱动器工作 - 每个用户会话关联 - - 但是,如果没有“会话”/令牌存在,服务需要能够无头(无人登录)。

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

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

    有可能(尽管明确推荐Microsoft),如果你能以某种方式设法让用户始终登录以获得他们的会话,那么就可以全力以赴令牌,如下所述:

    starting a UAC elevated process from a non-interactive service (win32/.net/powershell)

    否则,你必须像BuildForge一样模仿它。

    另见:

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