sourcetip

ClickOnce 응용 프로그램의 폴더 경로를 가져오는 방법

fileupload 2023. 5. 13. 10:43
반응형

ClickOnce 응용 프로그램의 폴더 경로를 가져오는 방법

콘솔에서 한 번 클릭하는 동일한 폴더에 파일을 작성해야 합니다..application(실행 가능한 파일)이 상주합니다.시작할 위치의 폴더입니다.

사용해 보았습니다.Application.StartupPath&Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)하지만 경로가 아래의 하위 폴더를 가리키고 있습니다.c:\Documents & Settings어떻게 하면 다음과 같은 경로를 얻을 수 있습니까?.application합니까?

폴더 위치를 찾으려면 앱을 실행하고 작업 관리자(CTRL-Shift-ESC)를 열고 앱을 선택한 후 마우스 오른쪽 버튼을 클릭하면 됩니다.|파일 위치를 엽니다.

경로가 c:\Documents & Settings 아래의 하위 폴더를 가리킵니다.

맞아요. ClickOnce applications설치한 사용자의 프로필 아래에 설치됩니다.실행 중인 어셈블리에서 정보를 검색하여 제공한 경로를 선택하고 확인하러 갔습니까?

Windows Vista 및 Windows 7(윈도우 7)에서는 클릭한 번 캐시를 다음과 같이 찾을 수 있습니다.

c:\users\username\AppData\Local\Apps\2.0\obfuscatedfoldername\obfuscatedfoldername

Windows XP에서는 다음과 같은 기능을 사용할 수 있습니다.

C:\Documents and Settings\username\LocalSettings\Apps\2.0\obfuscatedfoldername\obfuscatedfoldername

응용 프로그램 배포.현재 배포.ActivationUri가 작동할 수 있음

"배포 매니페스트의 TrustUrlParameters 속성이 false이거나 사용자가 UNC를 제공하여 배포를 열었거나 로컬로 열었을 경우 길이가 0인 문자열.그렇지 않으면 반환 값은 매개 변수를 포함하여 응용 프로그램을 시작하는 데 사용되는 전체 URL입니다."


하지만 여러분이 정말 원하는 것은 애플리케이션 배포입니다.현재 배포.데이터를 쓸 수 있는 폴더를 제공하는 데이터 디렉토리입니다.응용프로그램을 업데이트하면 원래 .exe 폴더에 있던 내용이 손실되지만 데이터 디렉토리를 새 버전의 응용프로그램으로 마이그레이션할 수 있습니다.당신의 앱은 그것이 가지고 있는 모든 로그 파일로 이 폴더에 쓸 수 있고 나는 그것이 쓰기 가능하다고 확신합니다.

는 중용사를 합니다.Assembly.GetExecutingAssembly().Location 가는 을 택하다ClickOnce배포된 애플리케이션. 41987 4.5.1.

그러나 배포 방법(xcopy, ClickOnce, InstallShield 등)에 관계없이 응용 프로그램이 배포된 폴더에는 쓰지 말아야 합니다. 이러한 폴더는 특히 최신 Windows 버전과 서버 환경에서 응용 프로그램에 대해서만 읽히기 때문입니다.

앱은 항상 이러한 목적으로 예약된 폴더에 써야 합니다.환경에서 필요한 폴더를 가져올 수 있습니다.특수 폴더 열거입니다.MSDN 페이지는 각 폴더의 용도를 설명합니다. http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

및 할 수 있는 파일은 ", " ", ", ", " 입니다.ApplicationData (으), (계속)LocalApplicationData (로컬) 또는CommonApplicationData 임시파용을 합니다.Path.GetTempPath또는Path.GetTempFileName.

위의 작업은 서버와 데스크톱에서도 수행됩니다.

편집::Assembly.GetExecutingAssembly()주 실행 파일에서 호출됩니다.

ClickOnce 응용프로그램이 C의 하위 디렉토리에 상주합니다.\Documents & Settings.로컬 파일은 기본적으로 로컬 PC에서 응용 프로그램을 실행할 수 있도록 "일시적"으로 다운로드되고 응용 프로그램 실행은 게시 설정(업데이트 확인, 버전 요구 사항 등)에 따라 배포된 ClickOnce 서버에서 제어되기 때문에 "깨끗한" 설치 디렉토리가 없습니다.

ClickOnce(참 == 시스템) 후에 응용 프로그램 폴더의 파일에 액세스하는 것이 문제라고 가정합니다.배포.ApplicationDeploy.IsNetworkDeployed) 응용 프로그램이 사용자의 PC에 설치됩니다. 응용 프로그램 자체에서 이 폴더를 가져오는 세 가지 방법은 다음과 같습니다.

String path1 = System.AppDomain.CurrentDomain.BaseDirectory;
String path2 = System.IO.Directory.GetCurrentDirectory();    
String path3 = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; //Remove the last path component, the executing assembly itself.

VSIDE 및 배포/설치된 ClickedOnce 앱에서 작동하지만 "진정한 == 시스템"은 없습니다.배포.ApplicationDeploy.네트워크 배포 여부" 확인이 필요합니다.ClickOnce는 Visual Studio 2017 프로젝트에 포함된 모든 파일을 선택하므로 애플리케이션이 애플리케이션 내에서 관련 경로를 사용하여 배포된 모든 파일에 액세스할 수 있습니다.

이는 Windows 10 및 Visual Studio 2017을 기반으로 합니다.

다음은 클릭 한 번으로 배포된 폴더 위치를 가져오는 데 효과적이며 검색에서 유사하고 구체적인 시나리오에 대해 어디에서도 언급되지 않은 내용입니다.

  • 응용프로그램이 회사 LAN 네트워크 폴더에 배포되면 클릭합니다.
  • 클릭 한 번 응용프로그램을 온라인 또는 오프라인으로 사용할 수 있도록 설정합니다.
  • 프로젝트 속성에서 클릭 한 번 설치 URL 및 업데이트 URL에 지정된 내용이 없습니다.즉, 설치 또는 업데이트를 위한 별도의 위치가 없습니다.
  • 게시 옵션에서 클릭 한 번 응용 프로그램에 대한 바탕 화면 바로 가기를 만드는 중입니다.
  • 시작할 때 경로를 가져올 폴더는 경로를 하드 코딩하지 않고 응용 프로그램의 DEV, INT 및 PROD 버전에서 액세스할 수 있는 폴더입니다.

다음은 제 사용 사례의 시각 자료입니다.

여기에 이미지 설명 입력

  • 파란색 상자 폴더는 각 환경의 응용 프로그램에 대한 내 디렉터리 위치입니다.
  • 빨간색 상자 폴더는 경로를 가져오려는 디렉터리입니다(이 디렉터리는 앱의 배포된 폴더 위치인 "MyClickOnceGreatApp_1_0_37"(OP와 동일).

클릭 한 번 응용 프로그램이 배포된 폴더를 반환하는 데 사용할 수 있는 이 질문의 제안이나 의견을 찾을 수 없습니다(해당 폴더를 찾기 위해 이 폴더와 관련하여 이동합니다).다른 인터넷 검색이나 관련 SO 질문도 답을 찾지 못했습니다.

제안된 모든 속성이 개체(예: ActivationUri)가 null이어서 실패했거나 로컬 PC의 캐시된 설치된 앱 폴더를 가리키고 있었습니다.예, IsNetworkDeployed(네트워크 배포됨)를 확인하여 null 개체를 정상적으로 처리할 수 있지만, 놀랍게도 ClickOnce 응용 프로그램에 대한 네트워크 배포 폴더 위치가 있음에도 불구하고 IsNetworkDeployed(네트워크 배포됨)가 false를 반환합니다.응용 프로그램이 로컬 캐시 비트에서 실행되고 있기 때문입니다.

해결책은 다음과 같습니다.

  • AppDomain.CurrentDomain.BaseDirectory애플리케이션이 비주얼 스튜디오 내에서 실행되고 있을 때 개발 및
  • System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation정상적으로 실행될 때.

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation응용 프로그램이 배포된 후 클릭한 네트워크 디렉터리를 모든 경우에 올바르게 반환합니다.즉, 다음을 통해 시작될 때:

  • setup.exe
  • MyClickOnceGreatApp.애플리케이션
  • 응용프로그램을 처음 설치하고 시작할 때 만들어진 바탕 화면 바로 가기입니다.

응용 프로그램을 시작할 때 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();
    }
}

언급URL : https://stackoverflow.com/questions/2359026/how-to-get-folder-path-for-clickonce-application

반응형