2013-07-08 3 views
0

사용자가 선택한 설치 디렉토리가 비어 있는지 확인하고 싶습니다. 예를 들어, 폴더가 아닌 데스크톱 디렉토리에 앱을 설치하려고하지 마십시오. 거기에). 지금까지 비용이 최종화 될 때까지 매우 혼란스러운 오류 메시지로 설치를 중단하는 사용자 지정 실행 파일이 있습니다. 차라리 사용자가 사용자 지정 단계를 지나칠 수 없도록하는 것이 좋습니다.WiX : INSTALLDIR 확인 중 비어 있습니다.

아무 관련이없는 것으로 보입니다. wix-users @에도 유용한 답변이없는 몇 가지 메시지가 있습니다.

+0

하면 업그레이드하는 동안 디렉토리를 변경 계획 마십시오 여기 코드는? –

+0

Nope; 업그레이드가 예정되어 있습니다. 우리는 현재 MSI 기반이 아닌 업그레이드 시스템을 사용하고 있습니다. 예, 좋지는 않지만 잘 알려져 있습니다. (설치 프로그램 UI에서 추가 점검이 필요하다는 질문에 언급 했어야했는데 비대화 형 설치를 수행 할 수있는 사람은 발밑에서 스스로를 쏠 수 없을만큼 똑똑하다고 예상됩니다.) – user5999744

+0

잘못되었습니다. 너무 많은 수준에서 나는 그것을 만지지 않을거야. –

답변

0

무엇이 가치있는 일인가? DLL에 WiX 사용자 지정 작업을 작성한 끝에 설치 세션에 액세스하고 속성을 설정할 수 있습니다. 추악한 솔루션; 나는 아직도 이것을하는 내장 된 것들이 있어야한다고 생각한다 ... 나는 그것을 찾을 수 없다.

관련 변경 사항은 here입니다.

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; 
    } 
    }