2010-03-08 5 views
1

Properties.Settings에 저장된 응용 프로그램 이름을 사용하여 응용 프로그램을 시작하려고 할 때 이상한 동작이 나타납니다. 사용하기 전에 값 (같은 값으로 값)을 다시 설정하지 않으면 실행 된 응용 프로그램이 해당 응용 프로그램 설정에 대한 올바른 위치를 얻지 못합니다. 아마 코드를 보여주는 것이 내가 말하는 것을 정리할 것입니다.Properties.Settings의 값을 사용하는 StartProcess가 비정상적인 결과를 초래합니다.

다음은 새 프로세스를 시작하는 코드입니다. 꽤 똑바로 앞으로 물건.

private void StartNewApplication() 
    { 
     Process mainAppProcess = new Process(); 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.FileName = Properties.Settings.Default.TheApplicationPath; 
     startInfo.WindowStyle = ProcessWindowStyle.Normal; 

     mainAppProcess.StartInfo = startInfo; 
     mainAppProcess.Start(); 
     mainAppProcess.WaitForExit(); 
    } 

표준 OpenFileDialog에서 파일을 탐색하여 설정을 간단히 설정하는 또 다른 기능이 있습니다. 나는 조각을 제외하고, 그 여기에서 보여주는 귀찮게하지 않습니다

 if (fileDialog.ShowDialog().Value == true) 
     { 
      Properties.Settings.Default.TheApplicationPath = fileDialog.FileName; 
      Properties.Settings.Default.Save(); 
     } 

(내가 통제 할 수 없음) 실패 된 코드를 뭔가 같은 :

private static string GetConfigFolder() 
    { 
     string configFolder = ConfigurationManager.AppSettings.Get("ConfigFolder"); 
     configFolder = Path.GetFullPath(configFolder);   
     return string.IsNullOrEmpty(configFolder) ? Environment.CurrentDirectory : configFolder; 
    } 

appSettings는 값이기 때문에 항상 되돌아옵니다. ", Path.GetFullPath 호출은 현재 디렉토리를 반환합니다. Properties.Setting 값을 다시 설정하지 않으면 응용 프로그램을 시작하는 프로그램의 경로입니다. 설정을 다시 설정하면 실행 된 응용 프로그램의 경로입니다.

아이디어가 있으십니까?

감사합니다, WTS

답변

1

설정은 설치의 컨텍스트 내에서 저장됩니다. 디버깅을하거나 Visual Studio를 실행중인 경우 기본값을 사용할 때마다 기본값이 사용되며 설정을 저장하면 디버깅 세션이 지속되는 동안 만 유지됩니다.

다른 말로하면, app.config 파일에서 해당 설정을 확인하십시오. 디버그하고 값을 변경하십시오. app.config 파일을 다시보십시오. 업데이트되지 않습니다. 반면에이 응용 프로그램을 배포하는 경우 app.config이 업데이트됩니다 (단, 다시 배포하거나 다시 설치하면 저장된 설정이 다시 덮어 쓰입니다).

+0

알아두기. 그러나 여기의 문제는 기본 설정이 "업데이트 된"설정과 정확히 동일하다는 것입니다. 기본 설정에 저장된 경로를 찾아 선택합니다. –

+0

비슷한 일이 있었지만 구체적인 것을 기억할 수는 없습니다. 응용 프로그램 설정에 대해 생성 된 파일을보고 특성에 예기치 않은 기본값이 없는지 확인하십시오. 내 문제는 설정 디자이너와 코드 비하인드가 일치하지 않는 것과 관련이있었습니다. – Jay

+0

필자는 값을 다시 설정하고 Watch 윈도우에서 String.Compare를 수행하기 전후에 모두 0을 실행하여 실행했습니다. –