2011-01-12 9 views
0

TFSビルド中にリモートシステムにDLLを登録するCodeActivityオブジェクトを作成しようとしています。私は自分のマシンに管理者権限を持つ自分のユーザーアカウントを偽装しています。 (私は今、私のマシンにDLLを登録しようとしています。)ワークフローをローカルでは実行しても、ビルドサーバからではなく、すべての試みがうまくいったことに注意してください。また、手動でregsvr32を実行すると、DLLは正しく登録され、登録解除されます。CodeActivityを使用してTFSビルドからDLLを登録

これは私が使用している非常に削ぎ落としたコードです:

Private DllType As Type 'Type of the DLL being registered is handled elsewhere' 
Dim Result As Integer 
Result = CInt(DllType.InvokeMember("DllUnregisterServer", BindingFlags.InvokeMethod, Nothing, Activator.CreateInstance(DllType), Nothing)) 

を、私はそれを実行すると、私はこのメッセージを取得し、最も関連はおそらく内部例外であること、「エントリポイントを見つけることができません。名前の「DllUnregisterServerの」DLL「RptBarcodeLabel.dll」

エラー=呼び出しのターゲットが例外をスローしてきた中で、System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo方法、オブジェクトのターゲットで、[]の引数をオブジェクト=スタック、SignatureStruct & sig、MethodAttribu System.RuntimeMethodHandle.InvokeMethodFastでTESのmethodAttributes、RuntimeType typeOwner) System.Reflection.RuntimeMethodInfo.Invokeで(IRuntimeMethodInfo方法、オブジェクトのターゲットオブジェクト[]引数、署名SIG、MethodAttributes methodAttributes、RuntimeType typeOwner) (オブジェクトobj、のBindingFlags invokeAttr、バインドバインダー、オブジェクトバインダー、オブジェクトバインダー、オブジェクトバインダー、オブジェクトバインダー、オブジェクトバインダー、バインダーバインダー、オブジェクトバインダー、バインダーバインダー、オブジェクトバインダー) Bindingバインダー、オブジェクトバインダー、オブジェクトバインダー、バインダーバインダー、バインダー、バインダー、バインダー、バインダー、バインダー、バインダー、バインダー)オブジェクト[]という名前のエントリポイントを見つけることができませんTfsCopyFile.TfsRegisterDLL.Execute(CodeActivityContextコンテキスト)、内部例外=でTfsCopyFile.DllRegServer.UnRegister() でTfsCopyFile.DllRegServer.InternalRegServer(ブールfUnreg) で引数) 'DllUnregisterServerの' DLL 'RptBarcodeLabel.dll'にあります。

DLLをリモートで登録するもう1つの方法は、うまくいくかもしれません - TFSからのビルド中にプロセスが起動できない限り、私は提案を公開しています。

答えて

0

これは私が同様の要件のために取っているアプローチです:展開サーバー上のオンザフライでの.batファイルを作成するために、Execのアクションを使用し、TFSBuild.projで

。バッチファイルはPsExecによってリモートで実行されます。この例では、msiexecを実行するバッチファイルを作成しますが、簡単に変更してregsvr32を使用してdllを登録できます。

<Exec Condition="'$(DeploymentServer)'!=''" Command='echo @echo off >"\\$(DeploymentServer)\C$\Temp\Install.bat"' ContinueOnError="true" /> 
<Exec Condition="'$(DeploymentServer)'!=''" Command='echo start /wait msiexec /uninstall "{98056358-8984-4554-b0c3-9f2af248a029}" /passive /log "C:\Temp\Uninstall.log" >>"\\$(DeploymentServer)\C$\Temp\Install.bat"' ContinueOnError="true" /> 
<!-- Kill the psexec service, otherwise it never terminates. --> 
<Exec Condition="'$(DeploymentServer)'!=''" Command='echo taskkill /IM PSEXESVC.EXE >>"\\$(DeploymentServer)\C$\Temp\Install.bat"' ContinueOnError="true" /> 
<Exec Condition="'$(DeploymentServer)'!=''" Command='"C:\Program Files\Sysinternals\psexec" -accepteula \\$(DeploymentServer) -u myuser -p mypassword -w "C:\Temp" "C:\Temp\Install.bat"' ContinueOnError="true" /> 

psexecのようなものを使用しないと、リモートサーバーでコマンドを実行しようとするとアクセス許可などの問題が発生する可能性があります。

+0

ありがとうございます - 私はpsexecをチェックし、CodeActivtyアイテムと組み合わせて、そのトリックを行いました。 – Scott

関連する問題