2009-12-17 7 views
2

사용자 프록시 정보를 탐지하는 코드를 작성했습니다. 이것은 프로그램을 직접 실행할 때 작동하지만 프로그램이 서비스에 의해 호출되지 않으면 작동하지 않습니다. 이 서비스는 사용자의 Firefox 설정을 가져올 현재 사용자 폴더 경로를 알 수 없습니다. 이 프로그램은 서비스에 의해 실행되어야합니다 ...이 서비스를 만들기 위해 현재 userprofile을 어떻게 얻을 수 있습니까?서비스 내에서 현재 UserProfile 경로 가져 오기

코드 샘플 :이 얻을 데스크톱에서 실행

public static string FIREFOX_PROXY_PATH = @"\APPLICATION DATA\MOZILLA\FIREFOX\"; 
public static string FIREFOX_PROXY_PROFILE_FILE_NAME = "PROFILES.INI"; 

string strProfPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + FIREFOX_PROXY_PATH + FIREFOX_PROXY_PROFILE_FILE_NAME; 

(작품 - 파일이 발견) :
C:\\Users\\myusername\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI

나는이 (fails- 파일을 얻을 서비스 내에서 실행하는 경우 되지 않음) 발견 :
C:\\Profiles\\NetworkService\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI

참고 : MyUserName 에다 나의 실제 사용자 이름으로 대체됩니다

+0

서비스는 "데스크톱과 상호 작용하여"전화를 걸도록 설정되었습니다.이 솔루션을 우연히 만났습니다. Win32 "LoadUserProfile"API를 사용하여 사용자 프로필을 명시 적으로로드합니다. 사용자 프로필을로드하기 전에 사용자에 대한 로그온 세션 (LogonUser 호출)을 만들어야합니다. 아직 테스트하지 않았습니다 – mytwocents

답변

1

코드는 실제로 작동해야하는 방식으로 작동합니다. 프로필을 받으려면 서비스가 실행되는 계정을 수정해야합니다. 이렇게하려면 제어판의 서비스 관리 스냅인으로 이동하여 서비스를 마우스 오른쪽 단추로 클릭하고 속성을 클릭 한 다음 서비스가 자신의 계정으로 실행되는 계정을 변경하십시오 (로그온 탭 아래).

물론 질문을 두 번 읽은 후에는 실제로 로그온하려는 사용자의 프로필 경로를 얻는 것이 좋습니다. 위의 경우 내가 위에 설명한 것보다 작동하지 않습니다. 현재 로그온 한 사용자를 얻으려면 다른 전술을 취한 다음 사용자 프로파일에 대한 경로를 확보해야합니다. 이 모든 것은 레지스트리에서 사용할 수 있습니다.

WindowsIdentity 클래스는 도움이 될 수 있지만 주어진 시간에, Windows 시스템에서, 명 이상의 사용자가 로그인. 내가 may을하기 때문에 대부분의 사용자의 컴퓨터에, 거기 말할있을 수 있음을 명심해야한다 일반적으로 하나의 활성 사용자 세션. 그러나 이것이 하나의 사용자 프로세스 만 실행 중임을 의미하지는 않습니다. 따라서 정확히 무엇을 성취하려고하는지에 따라 고려해야 할 다른 것들이있을 수 있습니다.

+0

이것은 여러 컴퓨터에 배포 될 예정이며 CurrentUserAccount로 설정할 수 있습니까? 새 계정을 만들어 실행해도 현재 사용자의 프록시 설정이 선택되지 않을까 우려됩니다. – mytwocents

+0

질문에 대답하려면 서비스가 Windows에서 어떻게 실행되는지 생각해야합니다. 기본적으로 서비스는 사용자가 컴퓨터에 로그온하지 않아도 시작할 수 있고 실행될 가능성이 높습니다. 일반적인 Windows 응용 프로그램 대 서비스를 사용하는 장점 중 하나입니다. 따라서 서비스가 '현재 사용자'로 실행되도록 설정할 수는 없습니다. 아무 의미도 없기 때문입니다. 응답의 마지막 단락을 참조하십시오. –

관련 문제