Regsvr32を同時に呼び出しても安全ですか?


3

私は登録する必要がある約100のdllを持っています regsvr32 /s some.dllへの各呼び出しを待つ必要がありますか。 regsvr32 次の電話をかける前に終了するか、またはそれらをすべて同時に実行することができます。

基本的に私はPowershellスクリプトを持っています

if([System.Environment]::Is64BitOperatingSystem)
{
    $regsvr = [System.Environment]::ExpandEnvironmentVariables('%windir%\SysWOW64\regsvr32.exe')
}
else
{
    $regsvr = [System.Environment]::ExpandEnvironmentVariables('%windir%\System32\regsvr32.exe')
}

foreach( $file in $filesToRegister)
{   
    Write-Verbose "$regsvr /s ""$file"""
    Start-Process $regsvr -ArgumentList '/s', """$file""" -Wait
}

登録されているファイルのすべてが大規模なプロジェクトによって生成されたvb6 dllファイルです。私は持っている必要がありますか -Wait 私の〜の上に Start-Process それともそれを脱いでも安全ですか?


プロセスが必要な安全対策を自動的に講じなかったことは非常に面白いことです。 :Dそうは言っても、おそらくある種の成功/失敗の報告がほしいと思うでしょう。
Daniel B

それが本当に私の質問なのですか、それとも自動的にそれらの安全対策を講じるのではないでしょうか。
Scott Chamberlain

いいえ、登録はスレッドセーフではないと思います。ほんのちょっと、それはそれが登録されたリソース(私が想像するレジストリ)を正しく同期させるかもしれません、しかし私はそれに賭けません。
Frank Thomas

私は問題なくCMD(バッチ)ファイルを使用して一度に10または15のDLLを登録しました。それと共にエラー報告をするために、最後にPAUSEがあったので、私は問題を読むことができました(例えば、いくつかのDLLは重要でない登録のためのエントリーポイントを持っていませんでした)。
DrMoishe Pippik

回答:


2

少し遊んだ後、私はそれを発見しました regsvr32 一度に複数のファイルを渡すことができます。切り替え $filesToRegister 相対パスを使用して引数リストの全長を取得する方法

if([System.Environment]::Is64BitOperatingSystem)
{
    $regsvr = [System.Environment]::ExpandEnvironmentVariables('%windir%\SysWOW64\regsvr32.exe')
}
else
{
    $regsvr = [System.Environment]::ExpandEnvironmentVariables('%windir%\System32\regsvr32.exe')
}

Set-Location $currentBuildFolder
$arguments = @('/s') + $filesToRegister
Write-Verbose "$regsvr $arguments"
Start-Process $regsvr -ArgumentList $arguments -Wait

そしてそれははるかに早く完了します。


regsvr32が一度に複数のファイルで機能することを確認していますか? Technetに "dllname"以外の参照はありません。 technet.microsoft.com/ja-jp/library/bb490985.aspx [XPでは、文法は変わっていないようです]、そして support.microsoft.com/en-us/help/249873/…
CJBS

はい、確かに /s あなたが渡したファイル名ごとにダイアログボックスが表示されます。
Scott Chamberlain
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.