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;
}
}
하면 업그레이드하는 동안 디렉토리를 변경 계획 마십시오 여기 코드는? –
Nope; 업그레이드가 예정되어 있습니다. 우리는 현재 MSI 기반이 아닌 업그레이드 시스템을 사용하고 있습니다. 예, 좋지는 않지만 잘 알려져 있습니다. (설치 프로그램 UI에서 추가 점검이 필요하다는 질문에 언급 했어야했는데 비대화 형 설치를 수행 할 수있는 사람은 발밑에서 스스로를 쏠 수 없을만큼 똑똑하다고 예상됩니다.) – user5999744
잘못되었습니다. 너무 많은 수준에서 나는 그것을 만지지 않을거야. –