0

ユーザーが選択したインストール ディレクトリが空であることを確認したい (たとえば、ユーザーがアプリをデスクトップ ディレクトリにインストールしようとしないようにするため)。これまでのところ、コストが確定する直前に、非常に紛らわしいエラー メッセージでインストールを中止するカスタム実行可能ファイルがあります。ただし、ユーザーがカスタマイズ手順を続行できないようにするだけです。

ここには関連するものは何もないようです。wix-users@ にも、有用な回答のないメッセージがいくつかあります。

4

2 に答える 2

1

DLLのWiXカスタムアクションでもこれを行いました。コードは次のとおりです。

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;
    }
  }
于 2013-07-17T17:14:39.190 に答える
0

価値があるのは、インストールセッションにアクセスしてプロパティを設定できるDLLにWiXカスタムアクションを書くことになったということです。醜い解決策; 私はまだこれを行う組み込みのものがあるべきだと思います...私はそれを見つけることができません。

興味のある方のために、関連するチェンジセットはこちらです。

于 2013-07-16T20:52:10.680 に答える