Ist es sicher, Regsvr32 gleichzeitig aufzurufen?

1641
Scott Chamberlain

Ich habe etwa 100 DLLs, bei denen ich mich registrieren regsvr32 /s some.dllmuss. Muss ich warten, bis die einzelnen Anrufe regsvr32beendet sind, bevor ich den nächsten Anruf mache, oder kann ich sie alle gleichzeitig ausführen?

Grundsätzlich habe ich das Powershell-Skript

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 } 

Alle Dateien, die registriert werden, sind Vb6-DLL-Dateien, die von einem großen Projekt generiert werden. Muss ich das -Waitauf meinem tragen Start-Processoder ist es sicher, es abzunehmen?

3
Es wäre ziemlich amüsant, dass der Prozess nicht automatisch alle notwendigen Sicherheitsmaßnahmen ergreift. : D Das heißt, Sie wollen wahrscheinlich eine Art Bericht über Erfolg / Misserfolg. Daniel B vor 8 Jahren 0
@DanielB das ist wirklich meine frage, oder nimmt man diese sicherheitsmaßnahmen nicht automatisch? Scott Chamberlain vor 8 Jahren 0
Ich würde vermuten, dass nein, die Registrierung wäre nicht Thread-sicher. Nur eine Ahnung, es kann sein, dass die Ressource, in der sie registriert ist (die Registry, die ich mir vorstelle), korrekt synchronisiert wird, aber ich würde nicht darauf wetten. Frank Thomas vor 8 Jahren 0
Ich habe 10 oder 15 DLLs gleichzeitig mit einer CMD (Batch) -Datei ohne Probleme registriert. Um eine Fehlermeldung zu erhalten, gab es am Ende PAUSE, sodass ich die Probleme lesen konnte (einige DLLs hatten keinen Einstiegspunkt für die Registrierung, was inkonsequent war). DrMoishe Pippik vor 8 Jahren 0

1 Antwort auf die Frage

2
Scott Chamberlain

Nachdem ich ein bisschen herumgespielt hatte, entdeckte ich, dass regsvr32Sie mehr als eine Datei gleichzeitig weitergeben können. Wenn Sie $filesToRegisterauf relative Pfade umschalten, wird die gesamte Länge der Argumentliste heruntergefahren

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 

Und es wird viel schneller abgeschlossen.

Sind Sie sicher, dass regsvr32 mit mehreren Dateien gleichzeitig arbeitet? Ich sehe auf Technet keine andere Referenz als "dllname": https://technet.microsoft.com/en-us/library/bb490985.aspx [für XP, aber die Syntax scheint sich nicht geändert zu haben] und https://support.microsoft.com/de-de/help/249873/how-to-use-the-regsvr32-tool-and-troubleshoot-regsvr32-error-messages CJBS vor 7 Jahren 0
Ja, ich bin sicher, entfernen Sie die `/ s` und Sie erhalten ein Dialogfeld für den von Ihnen übergebenen Dateinamen. Scott Chamberlain vor 7 Jahren 0