clickonce 응용 프로그램의 배포 된 폴더 위치를 얻을 수 있었고 비슷한 특정 시나리오를 위해 검색에서 본 곳에서는 언급되지 않은 것으로 나타났습니다.
- clickonce 응용 프로그램은 회사 LAN 네트워크 폴더에 배포됩니다.
- clickonce 애플리케이션이 온라인 또는 오프라인으로 사용 가능하도록 설정되어 있습니다.
- 내 프로젝트 속성의 clickonce 설치 URL 및 업데이트 URL에 아무것도 지정되지 않았습니다. 즉, 설치 또는 업데이트를위한 별도의 위치가 없습니다.
- 내 게시 옵션에서 clickonce 응용 프로그램에 대한 바탕 화면 바로 가기가 만들어졌습니다.
- 시작할 때 경로를 얻으려는 폴더는 경로를 하드 코딩하지 않고 응용 프로그램의 DEV, INT 및 PROD 버전에서 액세스하려는 폴더입니다.
내 유스 케이스의 시각적 내용은 다음과 같습니다.
- 파란색 상자의 폴더는 각 환경의 응용 프로그램에 대한 내 디렉토리 위치입니다.
- 빨간색 박스형 폴더는 경로를 가져 오려는 디렉토리입니다 (먼저 OP와 동일한 앱의 배포 된 폴더 위치 "MyClickOnceGreatApp_1_0_0_37"을 가져와야 함).
clickonce 응용 프로그램이 배포 된 폴더를 반환하는 데 도움이되는이 질문이나 의견에 대한 제안을 찾지 못했습니다 (이 폴더를 기준으로 이동하여 관심있는 폴더를 찾습니다). 다른 인터넷 검색이나 관련 SO 질문도 답을 얻지 못했습니다.
제안 된 모든 속성이 개체 (예 : ActivationUri)가 null로 인해 실패했거나 로컬 PC의 캐시 된 설치된 앱 폴더를 가리키고있었습니다. 예, IsNetworkDeployed를 검사하여 null 개체를 정상적으로 처리 할 수 있습니다. 문제는 아니지만 놀랍게도 IsNetworkDeployed는 실제로 clickonce 응용 프로그램에 대한 네트워크 배포 폴더 위치가 있지만 false를 반환합니다. 응용 프로그램이 캐시 된 로컬 비트에서 실행 중이기 때문입니다.
해결책은 다음을 보는 것입니다.
AppDomain.CurrentDomain.BaseDirectory
내가 개발하면서 응용 프로그램이 Visual Studio 내에서 실행될 때
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
정상적으로 실행될 때.
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
모든 경우에 clickonce 응용 프로그램이 배포 된 네트워크 디렉토리를 올바르게 반환합니다. 즉, 다음을 통해 시작될 때 :
- setup.exe
- MyClickOnceGreatApp.application
- 응용 프로그램을 처음 설치하고 시작할 때 생성되는 바탕 화면 바로 가기입니다.
응용 프로그램 시작시 WorkAccounts 폴더의 경로를 얻기 위해 사용하는 코드는 다음과 같습니다. 배포 된 응용 프로그램 폴더를 가져 오는 것은 부모 디렉토리까지 행하지 않기 때문에 간단합니다.
string directoryOfInterest = "";
if (System.Diagnostics.Debugger.IsAttached)
{
directoryOfInterest = Directory.GetParent(Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).FullName).FullName).FullName;
}
else
{
try
{
string path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
path = path.Replace("file:", "");
path = path.Replace("/", "\\");
directoryOfInterest = Directory.GetParent(Directory.GetParent(path).FullName).FullName;
}
catch (Exception ex)
{
directoryOfInterest = "Error getting update directory needed for relative base for finding WorkAccounts directory.\n" + ex.Message + "\n\nUpdate location directory is: " + System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
}
}