2016-07-14 15 views
0

ich eine Verzeichnisstruktur wie dies in WIX habeWie legen Sie einen Verzeichnispfad in WIX mit CustomAction fest?

<Directory Id="TARGETDIR" Name="SourceDir" > 
    <Directory Id="XXXFOLDER" Name="XXX"> 
    <Directory Id="YYYFOLDER" Name="YYY"> 
     <Directory Id="MAINFOLDER" Name="MAIN"> 

Nun ist dieser Hauptordner Verzeichnis Behebt nach D: \ XXX \ YYY \ MAIN \

ich einen Weg für den Hauptordner von einem Dienst zu bekommen, die beschließt E: \ XXX \ YYY \ MAIN ich auch eine Custom in einer cs-Datei Below zugewiesen haben, ist der Code

[Custom]

public static ActionResult GetNewDataPath(Session session) 
    { 

     sNewDataDir = xxxservice.GetPath(); 
     if (!String.IsNullOrEmpty(sNewDataDir.ToString())) 
     { 
      sNewDataDir+= "\\MAIN\\"; 
     } 

     session["MAINFOLDER"] = sNewDataDir; 
     return ActionResult.Success; 
    } 

Meine Benutzerdefinierte Aktionen sind wie folgt:

<Custom Action="GETDATAPATH" Before="CostFinalize" /> 

Der sNewDataDir enthält dieser Wert = "E: \ XXX \ YYY \ MAIN"

<CustomAction Id="GETDATAPATH" BinaryKey="InstallerCA"  
    DllEntry="GetNewDataPath" Execute="immediate"/> 

Dies ist die Reihenfolge installieren ist und ich Sitzung zuweisen ["HAUPTORDNER"]. Es wird zugewiesen. Es wird jedoch nicht auf der WIX-Seite wiedergegeben, da meine Dateien immer noch nach D: \ XXX \ YYY \ Main kopiert werden, obwohl sie E: \ XXX \ YYY \ Main zugewiesen wurden. Wie ändern wir den Verzeichnispfad der Sitzung ["MAINFOLDER"] mit CustomAction?

Antwort

2

Es ist normalerweise eine Frage der Reihenfolge. Die Werte der Eigenschaften werden den Verzeichnispfaden während der Aktion CostFinalize per MSDN zugewiesen. Die oben angegebene benutzerdefinierte Aktion muss irgendwann vor dem Ausführen von CostFinalize in der Ausführungssequenz sequenziert werden.

Es kann auch eine Frage der Berechtigung sein: MAINFOLDER kann eine eingeschränkte öffentliche Eigenschaft sein und führt nicht zur Ausführungssequenz (gilt nicht, wenn Ihre benutzerdefinierte Aktion in der Ausführungssequenz ausgeführt wurde). Lies über Restricted Public Properties, um zu sehen, ob das dein Problem sein könnte.

Und es kann auch die anti-virus Ihres Computers oder some andere issue mit den Skript-Engines sein.

Um eine gute Idee zu haben (oder zumindest jemanden zu finden, der herausfinden kann, was das Problem wirklich ist), müssen Sie ein gutes Protokoll Ihres fehlgeschlagenen Versuchs erstellen. Die meiste Zeit voicewarmup (oder/l * v) ist der beste Wert zu verwenden (neigt dazu, Ihnen am meisten, aber nicht alles was Sie wollen, zusammen mit viel zu viel von dem, was Sie nicht tun) und ist der Wert der meisten Installation Entwicklungsexperten verwenden beim Generieren der Protokolle, die sie verwenden und teilen. Es verlangsamt jedoch Ihre Installationen ein wenig.

+0

@ B. Murri - Ich habe versucht, CostInitialize in der Before-Attribut, aber es funktioniert nicht. Ich habe den obigen Code bearbeitet, um CustomAction hinzuzufügen. Können Sie nur überprüfen, ob das in Ordnung ist? –

+0

Sieht korrekt aus. Was zeigt Ihr Logging, dass diese Aktion aufgerufen wird? –

+0

Endlich behoben das Problem. Ich änderte nur den Pfad des übergeordneten Ordners, der der Pfad MAINFOLDER ist, und nicht die Ordner in MAINFOLDER, aufgrund dessen der Pfad nicht aktualisiert wurde. Jetzt habe ich manuell alle Pfade des Ordners durch eine benutzerdefinierte Aktion aktualisiert und es funktioniert gut. Vielen Dank –