Windows Server 2008 R2でサービスを実行しています。ファイルの依存関係をコピーするには、webdavにマップされたドライブにアクセスする必要があります。コマンドプロンプトからNet Useを実行すると、すべてが機能します。
Net Use z: https://domain.com/webdav /user:thisuser passwd
または、antビルドスクリプトのコマンドプロンプトからスクリプトを実行します。
<target name="mapdrive.developer" depends="checkmappeddrive" unless="mapped.drive.present">
<antcall target="disconnect.mapped.drive" />
<echo message="Mapping drive..." />
<exec executable="net">
<arg value="use" />
<arg value="z:" />
<arg value="https://test.com/plugins/servlet/confluence/default" />
<arg value="/PERSISTENT:YES" />
<arg value="/USER:xxxxx" />
<arg value="xxxxx" />
</exec>
</target>
はい、SSL/HTTPS webdavマップです。レジストリのシステム設定を認識しており、「デスクトップエクスペリエンス」というWebクライアントがインストールされています。ログインしてコマンドプロンプトから実行すると、すべてが正常に動作します。ただし、このスクリプトを使用して、ローカルシステムアカウントとして実行しているビルドサービスからスクリプトを生成すると、コマンドは次のエラーで失敗します。「システムエラー67が発生しました。」 「サービスがデスクトップと対話できるようにする」を有効にし、「ログオン」設定を通常のユーザーに変更してみました。どちらもうまくいきませんでした。ユーザーとしてドライブのマッピングに成功しているが、サービスとしてのスクリプト、ローカルシステムアカウントから実行すると失敗するという同様の問題を検索しました。見つからない場合、回避策があります。
ここで誰かがこれに対する実用的な解決策を見つけますか?どんな情報でも大歓迎です。
理解した。リモートソースからコピーしてローカルサービスとして実行するには、UNCパスを使用する必要があります。どうやら、これは stackoverflow で答えられました:
から http://msdn.Microsoft.com/en-us/library/ms685143.aspx :
リモートリソースにアクセスする必要があるサービス(または別のセキュリティコンテキストで実行されているプロセス)は、汎用名前付け規則(UNC)名を使用してリソースにアクセスする必要があります。サービスは、リソースにアクセスするための適切な特権を持っている必要があります。サーバー側のサービスでRPC接続を使用する場合は、リモートサーバーで委任を有効にする必要があります。
ドライブ文字はシステム全体ではありません。各ログオンセッションは、独自のドライブ文字のセットをAからZに受け取ります。したがって、リダイレクトされたドライブは、異なるユーザーアカウントで実行されているプロセス間で共有できません。さらに、サービス(または独自のログオンセッション内で実行されているプロセス)は、別のログオンセッション内で確立されたドライブ文字にアクセスできません。
サービスは、マップされたドライブ文字を介してローカルリソースまたはネットワークリソースに直接アクセスしないでください。また、実行時にNet Useコマンドを呼び出してドライブ文字をマップしないでください。
ドライブ文字は機能しません。そのため、sslを有効にしてwedav/httpsからファイルをコピーする場合は、UNCを使用してソースをマップする必要があります。
ネット使用 https://test.net/plugins/servlet/confluence/default /user:user passwd
次に、「Net Use」を実行すると、次のように表示されます。
C:\Users\Administrator\test>Net Use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
\\test.net@SSL\plugins\servlet\conf
luence\default
Web Client Network
The command completed successfully.
ロボコピーを使用してUNCからコピーしました:
robocopy \\test.ney@SSL\plugins\servlet\confluence\default . /z /e