Windows サービス内のネットワーク ドライブに clearcase ビューをマップしたいと考えています。
コマンドで試してみましnet use
たが、うまくいきませんでした。
2 に答える
パスが長すぎる場合に使用されるコマンドと同じ種類のコマンドを実行できるはずです。これは次のsubst
とおりです。
subst X: c:\path\to\my\View # for snapshot view
subst X: M:\myView # for dynamic view
ビューをドライブ文字にマップするため。
これは、サービス内から機能する必要があります。
- Windows アカウントを使用している (「ローカル システム アカウント」ではありません)
- 動的ビューは既に開始されています (
M:\
MVFS
マウント ポイント ドライブに表示されます) 。
このアプローチが機能することを願っていますが、実際にはサービスからではありません。私はこの問題にかなり熱心に取り組んできましたが、役に立ちませんでした。問題は 2 つあります。
- Windows サービスから、他のユーザーに表示されるドライブをマップできるようにするには、「デスクトップと対話する」プロパティ セットを使用して「ローカル システム」アカウント (デフォルト) として「ログオン」する必要があります。
- 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」を使用しても)、これはあなたも望んでいたと思います。