2014-10-16 4 views
0

Нужно выполнить CustomAction во время установки, чтобы получить файл nlbdb.bak из MSI. Как пройти его путь?Получить файл из MSI in wix Custom Action (Before = "InstallFinalize")

<Directory Id="ProgramFilesFolder"> 
    <Directory Id="BACKUP" Name="BACKUP"/> 
<Directory/> 
<DirectoryRef Id="BACKUP"> 
    <Component Id="VMBackup"> 
    <File Id="Backup" Name="nlbdb.bak" Source="BACKUP\nlbdb.bak" DiskId="1" KeyPath="yes" /> 
    </Component> 
</DirectoryRef> 

CA

[CustomAction] 
public static ActionResult CustomAction1(Session session) 
{ 
    string Directory = "";//get file path nlbdb.bak 
    bool test = File.Exists(Directory); 
} 
+0

Это не ясно, что вы пытаетесь сделать. Это обновление, и вы пытаетесь скопировать файлы до их замены? Или это в конце вашей установки, и вы хотите скопировать только что установленный файл где-нибудь? Если это так, то ваш CA должен быть отложен, поэтому он запускается после установки файлов. – PhilDW

+0

Я создаю новый установщик. Перед завершением установки (файлы не копируются в выбранную папку) необходимо получить в файле CA nlvdb.bak определенные операции. Итак, вот как получить этот файл? В папке BACKUP еще нет. Он будет показан после успешного завершения CA. –

+0

Проблема в том, что файл, который вы хотите скопировать, находится в CAB внутри файла MSI, с которого Windows будет устанавливать его. Вы можете скопировать его после его установки. – PhilDW

ответ

0

Вы можете получить доступ к свойству WIX внутри пользовательского действия с использованием

var propertyValue = session["MY_PROPERTY"]; 

В вашем случае, если вы хотите использовать, чтобы получить значение BACKUP, которое будет где был установлен файл. Очевидно, вы также соедините имя файла по мере необходимости.

0

Используйте session.Format метод как это:

[CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     string path = session.Format("[#Backup]"); 
     bool test = File.Exists(path); 

     return ActionResult.Success; 
    } 

    <CustomAction Id="CustomAction1" BinaryKey="CustomActions" DllEntry="CustomAction1" Execute="immediate" Return="check" Impersonate="yes"/> 

    <InstallExecuteSequence> 
     <Custom Action="CustomAction1" Before="InstallFinalize">Not Installed</Custom> 
    </InstallExecuteSequence> 
Смежные вопросы