Frage

Nach dem Anschluss an die Beratung in diese Frage erfolgreich, fügte ich ein paar zusätzliche Zeilen Code für eine andere benutzerdefinierte Aktion. Dieser soll regsvr32 auf der Kopie von CAPICOM nennen, die ich versucht habe, in dem System des Benutzers Ordner abzulegen. Aber ich bin immer Fehler 2721, die ein benutzerdefinierte Aktion nicht gefunden Fehler zu sein scheint, von dem, was ich gesehen habe. Irgendwelche Vorschläge? Ich versuche, die Übereinstimmung mit vorherigen Iterationen meines Installer zu halten, indem regsvr Aufruf, anstatt nur das Hinzufügen der Registrierungseinträge während der Installation, die stattdessen eine gute Idee sein könnte. ::: zucken :::

<Directory Id="SystemFolder" Name="Sys">
  ...
  <component ...>
     ...
    <File Id="CapiCom.Dll" LongName="CapiCom.Dll" Name="CAPICOM.DLL" Source=... />
  </component>
</directory>
...
<CustomAction Id="REGCAPICOM" ExeCommand='regsvr32.exe "[SystemFolder]capicom.dll"' Return = "ignore" Execute="deferred" />
...
<InstallExecuteSequence>
  ...
  <Custom Action="REGCAPICOM" After="InstallFiles" />
</InstallExecuteSequence>

Edit: Ja, mit regsvr32 als Installateur ist hässlich. Aber wenn ich die CAPICOM SDK heruntergeladen hat, das ist, was MS sagte, um zu tun, um es zu installieren. Suche um hat sagen viele Leute festgestellt, dass dies eine dumme Art und Weise ist, es zu tun ... aber es ist auch Mechanismus MS zur Verfügung gestellt. Ich werde für einen besseren Weg, um Vorschläge zu hören. Ich glaube nicht, halte es für eine große Sache, wenn CAPICOM zurückgelassen wird, wenn meine Anwendung deinstalliert wird, wenn man bedenkt, dass es sich um eine Standard-Windows-Komponente ist.

Edit: Hmmm. Anscheinend eines der Dinge, auf der DLL laufen SelfReg tut, ist ein zufälliges Saatgut zu schaffen, um die Registrierung hinzuzufügen. Nicht sicher, welcher Mechanismus nutzt diesen Samen zu erzeugen, aber ich vermute, es wäre in einem schlechten Geschmack in Betracht gezogen werden, um nur einen selbst zu erzeugen, vor allem, wenn ich alle Benutzer den gleichen Samen gab. Nicht sicher .... Anscheinend wenn ich überspringen diese CAPICOM tut es auf seine eigene, also bin ich in Ordnung.

War es hilfreich?

Lösung

Der richtige Weg:

  • c: \ Programme \ Microsoft Visual Studio .NET 2003 \ Common7 \ Tools \ Deployment \ regcap.exe“/ O capicom.reg capicom.dll

  • Ausführen Programm von Adam Tengen Beitrag hier .

Beachten Sie, dass Wärme (und Schmiere, IIRC) nicht, wie dieses Posting, Arbeit richtig auf CAPICOM.

Der falsche Weg:

<CustomAction Id="RegisterCapicom" Directory="SystemFolder" ExeCommand="regsvr32.exe /s &quot;[SystemFolder]Capicom.dll&quot;" Return="check" Execute="deferred" />
...
<InstallExecuteSequence>
  <Custom Action="RegisterCapicom" After="InstallFiles" />
</InstallExecuteSequence>

Andere Tipps

Uhh, versuchen Sie wirklich ein Windows-System-Datei selbst zu installieren? Das ist nicht auf sehr vielen Ebenen erlaubt. Auch regsvr32.exe ist SelfReg und SelfReg ist gut bekannt sein Übel in Installationen. Eigentlich das Windows Installer mit der Registrierung zu schreiben, ist weit superiour

Allerdings ist die ganze Konstruktion ist hier sehr suspekt.

Sie können Wärme auf die Datei verwenden, um eine Ausgabe WXS-Datei zu erstellen, welche die capicom.dll Informationen in der Registrierung ohne die Verwendung von regsvr32 gesetzt wird, wenn die msi ausgeführt

So etwas so:

heat file [Path\Capicom.dll] -template:product -out capicom.wxs

Dann die capicom.wxs zu Ihrem Installateur hinzuzufügen, in dieser Datei erstellen ComponentGroup Element, das die Komponente (n) Element (e) enthält:

<ComponentGroup Id="capicom">
  <ComponentRef Id="capicom.dll"/>
</ComponentGroup>

Nach dem in der Haupt WXS Datei mit dem Fragment Element hinzufügen, das die CAPICOM Komponente verknüpfen

  

Der letzte Schritt ist den ComponentGroupRef des Merkmal hinzufügen, dass es gehört zu:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top