2012-07-03 2 views
1

현재 내 응용 프로그램 용 자동 업데이트 프로그램을 작성 중입니다.C# : 브라우저에서 시작할 때 Directory.getCurrentDirectory()

내가 설정하고 싶습니다 (설치 프로그램, 업데이트 프로그램 및 제거 도구와 결합 된) 모든 자동 재료 : C에서

  • 시작 메뉴 항목
  • 폴더 : \ 프로그램 파일 \
  • 구성 폴더 앱 데이터에서 "프로그램 & 기능"
  • 바탕 화면 바로 가기에서
  • 소프트웨어 제거-항목 (지역 로밍 /에 따라).

매우 잘 작동합니다. Program Files 및 레지스트리에 기록하려면 도구에 관리자 권한이 필요합니다. 그래서 원하는 소프트웨어를 선택한 후에 AppLauncher의 "다시 시작"을 추가했습니다. 이 같은 그냥 뭔가 :

ProcessStartInfo pi = new ProcessStartInfo(Directory.GetCurrentDirectory() + @"\AppLauncher.exe"); 
     pi.Verb = "runas"; 
     pi.Arguments = "install " + this.appItem.APID; 

     Process p = new Process(); 
     p.StartInfo = pi; 
     try 
     { 
      p.Start(); 
      Application application = Application.Current; 
      application.Shutdown(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Unable to install the application.\n\n" + ex.ToString(), "Error", 
      application.Shutdown(); 
     } 

는 또한이 단계는 아주 잘 작동, 사용자가 폴더에 어딘가에 AppLauncher.exe를 저장하고 더블 클릭하여 시작 합니다.

사용자가 브라우저에서 "실행"을 선택하면 설치 관리자가 "AppLauncher.exe"를 찾을 수 없다는 메시지와 함께 표시됩니다. 그게 바로 브라우저 설정을 할 것입니다 다른 WORKINGDIRECTORY에서 파일을 시작하기 때문에

Directory.GetCurrentDirectory() 

이 파일이있는 적절한 값을 반환하지 않습니다, 가정합니다. 사용자가 파일에 다른 이름을 지정하기로 결정한 경우 작동하지 않을 수도 있습니다.

그럼 어떻게해야합니까? P

+0

참조 : http://stackoverflow.com/questions/218061/get-the-applications-path –

답변

5

당신이 그러나, 그것은 더 나은

경우

System.Reflection.Assembly.GetEntryAssembly().Location 

Directory.GetCurrentDirectory() + @"\AppLauncher.exe" 

(재발견하지 바꾸기 :

는 File.GetCurrentFile()와 같은 뭔가가 있나요 이미 구현 된 설치 솔루션 중 하나를 사용해야합니다. 모든 통합 기능 및 모든 버그를 이미 해결했습니다.

예 : ClickOnce, WiX.

+0

리플렉션을 활용하면 이러한 과부성이 발생하지 않습니까? – Alex

+0

.NET과 함께 제공되므로 성능에 약간의 영향을 미칠 수 있습니다. OP는 현재 실행중인 프로그램 경로를 가져 오려고합니다. 그게'GetEntryAssembly()'가 의도 한 것입니다. 추신 : 더 조심스럽게 질문을 보면서, 정확히 OP가 찾고있는 것입니다 ("'File.GetCurrentFile()''). – penartur

+0

실제로, 현재 실행중인 코드를 포함하는 어셈블리는'System.Reflection.Assembly.GetExecutingAssembly() '를 통해 검색됩니다. – Alex

관련 문제