2009-09-17 9 views
3

WiX를 사용하여 설치 프로그램을 만들었습니다. 설치 프로그램이하는 한 가지는 환경 변수 PLUGIN_DIRECTORY (시스템 레벨에 있음)를 설정하는 것입니다.C#을 사용하여 Windows 환경 변수에 액세스 할 수 없습니다

내가 작성한 일부 C# 코드에서 해당 변수에 액세스해야 특정 디렉토리를 볼 수 있습니다. 불행하게도

FileSystemWatcher water = new FileSystemWatcher(); 
watcher.Path = Environment.GetEnvironmentVariable("PLUGIN_DIRECTORY") + "\\"; 

을 (내가 디버깅 할 때), 모든 watcher.Path는 "\"는하다 설정 : 나는 다음과 같은 코드를 통해이 작업을 수행.

설치 후 재부팅해야합니까? 변수가 이미 설정되어있는 이유는 알 수 없습니다. 다른 제안? 나는 어떤 오류도 내지 않고있다. 단지 올바른 길을 보지 않고있다.

감사

+0

그냥 확인하려면 - C# 코드와 프로세스는 윅스가 완료 설치 한 후 시작, 또는 그 시점 전에 시작? 예를 들어 플러그인 용 WiX 설치 프로그램이 있고 기본 앱이 이미 실행되고 있습니까? –

답변

9

경우했다 당신이 환경 변수를 만들 때 비주얼 스튜디오는 가까운 당신이 때까지 픽업 VS.을 다시 시작이라면 나도 몰라 열 프로세스가 시작되면 부모 프로세스에서 환경 변수를 상속받습니다. VS 빌드를 실행 한 후에 VS가 실행 파일을 시작하는 방법을 정확히 모르겠지만 아마도 하위 프로세스이므로 결과적으로 새 환경 변수가 선택되지 않습니다.

+1

그건 내 문제였다. 설치를 처음 수행했을 때 FileWatcher (AKA, 내 앱이 작동하지 않음) 이벤트에 올바르게 응답하지 못했습니다. Visual Studio에서 앱을 수정했지만 Visual Studio에서 테스트했을 때 새로운 환경 변수를 선택하지 않았습니다. 기본적으로 그것은 두 개의 별개의 문제였습니다. 나를 올바른 방향으로 향하게 해주셔서 감사합니다! – JasCav

0

설치 프로그램을 실행 한 후 PLUGIN_DIRECTORY에 설정 한 내용이 있습니까?

+0

예. 로컬 드라이브의 경로 (C : \ Program Files \ MyApp \ Plugins)로 설정됩니다. – JasCav

0

죄송합니다. 컴파일러가 설치되어 있지 않기 때문에 내가 끔찍한 생각이 들지 않습니다. 하지만 사용하려고 할 수 있습니다 : watcher.Path = Environment.GetEnvironmentVariable ("% PLUGIN_DIRECTORY %") + "\";

즉, PLUGIN_DIRECTORY 대신 % PLUGIN_DIRECTORY %입니다.

는 업데이트 후, 다른 프로세스가 인식 할 수없는, 그 어떤 도움

0

시스템 환경이 부모로부터 상속이었다 바랍니다.

"기계"에서로드 환경별로 프로세스 환경을 새로 고치고 "프로세스"에 저장할 수 있습니다.

string SysEnvir = System.Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); 

System.Environment.SetEnvironmentVariable("Path", SysEnvir, EnvironmentVariableTarget.Process); 
관련 문제