Ho bisogno di eseguire eseguibile per l'installazione/rimozione personalizzata, dopo l'installazione e prima della disinstallazione. Ha bisogno di funzionare con privilegi elevati. Come farlo correttamente?Come eseguire un eseguibile personalizzato con privilegi elevati?
risposta
Quindi, la soluzione finale era come questo:
<CustomAction Id="Install" Directory="APPLICATIONROOTDIRECTORY"
Execute="deferred" Impersonate="no" Return="ignore"
ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -install" />
<CustomAction Id="Uninstall" Directory="APPLICATIONROOTDIRECTORY"
Execute="deferred" Impersonate="no" Return="ignore"
ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -uninstall" />
<InstallExecuteSequence>
<Custom Action='Install' After='InstallFiles' >
$ProductComponent = 3
</Custom>
<Custom Action='Uninstall' After='InstallInitialize' >
?ProductComponent = 3
</Custom>
</InstallExecuteSequence>
Qualsiasi consiglio per migliorarlo?
Date un'occhiata a questo blog presso la sezione Come all'autore personalizzato azioni che richiedono privilegi amministrativi
Un'altra link che spiega in realtà tutti i tipi di azioni personalizzate. L'elemento CustomAction in Wix.
Questo dovrebbe aiutare un po 'di più.
Dopo aver guardato la vostra soluzione ti sembra di fare un tipo di 18 CustomAction, qui ho incollato il contenuto del blog precedente per questi tipi:
azione personalizzata Tipo 18 chiama un eseguibile che viene installato con il applicazione durante la sessione corrente. La colonna Origine nella tabella CustomAction contiene la chiave del record nella tabella File.
La colonna Destinazione nella tabella CustomAction contiene la stringa della riga di comando per l'eseguibile. Si applicano tutte le opzioni di elaborazione del ritorno, pianificazione dell'esecuzione e esecuzione in-script.
perché il file è installato con l'applicazione, ci sono restrizioni sul sequenziamento azione misura Tipo 18:
If the source file is not already installed on the computer:
Custom action must be sequenced after CostFinalize action because only after this action path to the file can be resolved.
If the source file is not already installed on the computer:
Deferred custom actions of this type must be sequenced after the InstallFiles action.
Non-deferred custom actions of this type must be sequenced after the InstallFinalize action.
Punto di ingresso per l'azione personalizzata riceve l'handle alla sessione d'installazione. Durante l'esecuzione di azioni personalizzate posticipate, la sessione potrebbe non esistere più. Per ottenere il valore delle proprietà, utilizzare la proprietà CustomActionData.
Ecco come aggiungere 18 Tipo di azione personalizzata in Wix:
<Directory Id="TARGETDIR" Name="SourceDir">
<Component Id="Component1"
Guid="*">
<File Id="MyCA" Name="MyCA.exe" />
</Component>
</Directory>
<CustomAction Id="DoSomething"
FileKey="MyCA"
ExeCommand="-switch"
Execute="deferred"
Return="check"
HideTarget="no"
Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="DoSomething" Before="InstallFinalize" />
</InstallExecuteSequence>
In primo luogo, aggiungiamo MyCA.exe al tavolo del file.
Abbiamo anche aggiungere un'azione personalizzata di tipo 18 al tavolo CustomAction. Attributo FileKey punta all'elemento con la dll di azione personalizzata. L'attributo ExeCommand specifica la stringa della riga di comando per l'eseguibile.
L'ultima cosa da fare è pianificare la nostra azione personalizzata in tutte le tabelle di sequenza richieste.
Questo dovrebbe dare una mano, specie ciò che manca, ma mi suggeriscono fortemente che si guarda a tutti i tipi di azioni personalizzate che vi aiuteranno in seguito quando si effettua più installatori
Questo non è sufficiente per farlo funzionare. È necessario installare azioni personalizzate nel giusto punto di sequenza e utilizzare le giuste condizioni per gestire scenari di aggiornamento, riparazione, ecc .:( – user626528
Ma questo risponde alla tua domanda: fornisce una guida chiara su come eseguire CA elevata e sei libero per sviluppare ulteriormente l'idea di costruire quello che ti serve –
@Yan Sklyarenko, non lo è.Questo è il 10% della risposta reale – user626528
È possibile aggiungere 'NON RIMUOVERE' per l'installazione & Sequenza di riparazione. E 'installato AND (REMOVE = "ALL")' solo per la sequenza UnInstall.
<InstallExecuteSequence>
<Custom Action='Install' After='InstallFiles' >
NOT REMOVE
</Custom>
<Custom Action='Uninstall' After='InstallFiles' >
Installed AND (REMOVE = "ALL")
</Custom>
</InstallExecuteSequence>
Spero che questo sarebbe utile a qualcuno alle prese con Wix Tool Set Tags: CustomAction, InstallExecuteSequence, Esegui exe dopo Wix installazione completa, file binario o risorsa all'interno di Wix
Anche se, non è in grado di trovare il modo avere fatto da BootStrapper
Nome file: Product.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="TestingQtExec" Language="1033" Version="1.0.0.0"
Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MediaTemplate EmbedCab="yes" />
<Feature Id="ProductFeature" Title="TestingQtExec" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<Binary Id="WixCA1"
SourceFile="FTDI.exe"/>
<!-- install plugin -->
<CustomAction Id="FTDIInstall"
BinaryKey ="WixCA1"
ExeCommand="/passive"
Execute="commit"
Return="asyncNoWait"
HideTarget="no"
Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="FTDIInstall" Before="InstallFinalize" />
</InstallExecuteSequence>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="TestingQtExec" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="cmpSampleTXT" Guid="*">
<File Source="Sample.txt" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
Puoi approfondire come questo risponde alla domanda originale dei poster? – Kmeixner
cos'è ProductComponent ?? –