2016-06-10 3 views
1

Ich habe nach einer Lösung gesucht, um einen Verzeichnispfad für ein Feature für meine Anwendung programmatisch zu überschreiben.So erstellen Sie eine benutzerdefinierte Aktion des Typs wix

Ich fand heraus, dass ich eine Art-35-Aktion (https://msdn.microsoft.com/en-us/library/windows/desktop/aa368093(v=vs.85).aspx) benötigen

ich das Internet für eine Weile gesucht, aber nirgends finde ich, wie solche benutzerdefinierte Aktion in C# erstellen.

Meine aktuelle benutzerdefinierte Aktion wie folgt aussieht:

<CustomAction Id="CheckForSynergyInstallation" 
      Return="check" 
      Execute="immediate" 
      BinaryKey="Real.CustomActions" 
      DllEntry="GetVersionInformation" Directory="SYNERGY_FEATURE_FOLDER" /> 

und die C# -Code für sie wie folgt aus:

var synergyFolder = new FileInfo(exactSynergyVersionConfigurationFile).Directory.FullName; 
       log.Info($"Synergy Folder set to {synergyFolder}"); 

       session["SYNERGY_FEATURE_FOLDER"] = synergyFolder; 

Antwort

3

Der Typ 35 benutzerdefinierte Aktion ruft MsiSetTargetPath an den Standort des Verzeichnisses zu ändern. Wenn Sie bereits über eine DTF-basierte benutzerdefinierte Aktion verfügen, können Sie session.SetTargetPath aufrufen, anstatt die Eigenschaft festzulegen.

Wenn Sie noch keine code-basierte benutzerdefinierte Aktion haben, können Sie die CustomAction element mit etwas weniger Parametern verwenden, um eine Aktion vom Typ 35 zu erzielen. Nämlich auslassen BinaryKey und DLLEntry:

<CustomAction Id=... Return=... Execute=... 
    Directory="SYNERGY_FEATURE_FOLDER" Value="location"/> 
+0

Danke. Ich wusste nicht, dass eine benutzerdefinierte Aktion vom Typ 35 nur eine Implementierung war und dass ich sie nicht selbst erstellen musste. –

0

Meinen Sie, dass nur die Dateien in dieser Funktion an einen anderen Ort gehen, als die anderen Dateien im Setup? Was Sie tun, sieht so aus, als würde der INSTALLFOLDER/TARGETDIR-Speicherort festgelegt, was bedeutet, dass alle für INSTALLFOLDER bestimmten Dateien an diesen Speicherort gesendet werden. Das scheint nicht das zu sein, wonach Sie fragen, wenn Sie sagen, dass Sie möchten, dass die Dateien in einem Feature anderswo angezeigt werden.

Wenn einige Dateien an einen von Ihnen festgelegten Ordner gesendet werden sollen und der Rest an die vordefinierten Speicherorte (ProgramFiles, GAC, Gemeinsame Dateien usw.) verschoben werden soll, definieren Sie einfach eine Verzeichniseigenschaft und Spezifizieren Sie Ihre Komponenten in diesem Verzeichnis. Ihre benutzerdefinierte Aktion wird diesen Eigenschaftsnamen festlegen, so dass der Speicherort des Verzeichnisses den erforderlichen Wert hat und der Rest der Dateien dorthin geht, wo sie hingehen sollen.