2013-07-08 2 views
0

Я хотел бы проверить, что выбранный пользователем каталог установки пуст (так, например, они не пытаются установить приложение в свой рабочий каталог, а не в папку там). До сих пор у меня был пользовательский исполняемый файл, который прерывает установку с очень запутанным сообщением об ошибке, почти так же, как стоимость завершается. Однако я предпочел бы просто запретить пользователю продолжать шаг настройки.WiX: проверка INSTALLDIR пуста

Ничего похожего здесь не было; есть несколько сообщений без полезных ответов на wix-users @.

+0

Планируете ли вы об изменении каталога во время обновления? –

+0

Nope; ожидается, что обновления будут на месте. В настоящее время мы используем систему обновления, отличную от MSI, так или иначе - да, это плохо, но это известно. (думаю, я должен был упомянуть в вопросе о том, что я ожидаю дополнительной проверки в пользовательском интерфейсе установщика, люди, которые могут делать неинтерактивные установки, как ожидается, будут достаточно умны, чтобы не стрелять в ногу.) – user5999744

+0

Это неправильно на стольких уровнях, что я даже не буду трогать его –

ответ

0

Для чего это необходимо: в результате было создано пользовательское действие WiX в DLL, где я могу получить доступ к сеансу установки и задавать свойства. Уродливое решение; Я все еще думаю, что должны быть встроенные вещи, которые это делают ... Я просто не могу найти его.

Для заинтересованных, соответствующий набор изменений here.

0

Я сделал это с помощью специального действия WiX в DLL. Вот код:

WiX:

<Binary Id="CustomAction" SourceFile="$(var.SourceBinFolder)\MyCustomAction.CA.dll" /> 
<CustomAction Id="CheckFolderCustomAction" BinaryKey="CustomAction" DllEntry="CheckFolder" /> 
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> 

<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> 
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="CheckFolderCustomAction" Order="2">1</Publish> 
<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="3">InstallDirOk = "1"</Publish> 

пользовательских действий:

public class CustomActions 
    { 
    [CustomAction] 
    public static ActionResult CheckFolder(Session session) 
    { 
     string installDir = session["INSTALLFOLDER"]; 
     installDir = installDir.Trim(); 
     session["InstallDirOk"] = "1"; 
     if (Directory.Exists(installDir) && Directory.EnumerateFileSystemEntries(installDir, "*", SearchOption.TopDirectoryOnly).Any()) 
     { 
     if (DialogResult.No == MessageBox.Show(
       string.Format("Selected folder \"{0}\" is not empty. This might cause existing files to be overwritten. Do you want to proceed?", installDir), 
       "Please confirm", 
       MessageBoxButtons.YesNo)) 
     { 
      session["InstallDirOk"] = "0"; 
     } 
     } 

     return ActionResult.Success; 
    } 
    } 
Смежные вопросы