我想检查用户选择的安装目录是否为空(例如,他们不会尝试将应用程序安装到他们的桌面目录中,而不是其中的文件夹)。到目前为止,我已经有了一个自定义可执行文件,它会以非常令人困惑的错误消息中止安装,就在成本最终确定之前。不过,我宁愿阻止用户继续通过自定义步骤。
这里似乎没有任何相关内容;在wix-users @上也有一些没有有用答案的消息。
答案 0 :(得分:0)
为了它的价值:最终在DLL中编写了一个WiX自定义操作,我可以在其中访问安装会话并设置属性。难看的解决方案;我仍然认为应该有内置的东西这样做......我找不到它。
对于那些感兴趣的人,相关的变更集是here。
答案 1 :(得分:0)
我也在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;
}
}