2016-10-03 2 views
0

Windows에서 서비스를 실행할 때 MyDocuments 폴더의 일부 파일에 액세스하려고합니다. 내 경우서비스 응용 프로그램 내에서 TPath.GetDocumentsPath를 호출하십시오.

  • C:\Documents and Settings\<username>\My Documents (XP)
  • C:\Documents and Settings\<username>\My Documents (나중에 Vista 또는)

내가 C:\WINDOWS\system32\config\systemprofile\Documents를 얻을 : 문서는 윈도우 GetDocumentsPath 반환의 경우는 말한다. Windows의 문서 디렉토리에 어떤 종류의 링크가 있습니까? Btw, C:\WINDOWS\system32\config\systemprofile 경로에 Documents 폴더가 없습니다.

누군가가 설명해 주시겠습니까?

+0

http://serverfault.com/questions/9325/ 예상되는 결과는 무엇입니까? 로컬 시스템 계정에 문서 폴더가있는 이유는 무엇입니까? 어쨌든 로컬 시스템으로 서비스를 실행하는 이유는 무엇입니까? 아마 당신은 이것이 나쁜 습관으로 간주된다는 것을 알고 있습니다. 또한 시스템 리디렉션을 파일 시스템에 적용하십시오. 프로세스가 32 비트라면 system32가 SysWOW64로 리디렉션된다는 것을 기억하십시오. –

+0

이제 "MyDocuments' 폴더라고도합니다. 그러나 어느 것이 당신을 의미합니까. 각 사용자마다 하나씩 있습니다. 이거 알고 있니? –

답변

2

Documents 폴더는 사용자 당 폴더입니다. TPath.GetDocumentsPath()은 호출 스레드와 연결된 사용자 계정의 Documents 폴더를 반환합니다. 그러나 서비스가 특정 사용자 계정이 아닌 SYSTEM 계정으로 실행중인 경우 TPath을 사용하여 사용자 별 폴더의 경로를 얻을 수 없습니다. 사용자의 문서 폴더 (또는 다른 사용자가 특정 폴더)를 검색 할 수있는 서비스를 위해

, 서비스는 다음 중 하나를 수행해야

  1. 것은 시작하기 원하는 사용자가 아닌 SYSTEM으로 실행 계정.

  2. 계정으로 실행중인 경우 원하는 사용자 계정의 토큰을 얻은 다음 해당 토큰을 SHGetFolderPath() 또는 SHGetKnownFolderPath()으로 전달하십시오. 사용자가 현재 로그인되어있는 경우

    • , 해당 세션의 사용자 토큰을 얻을 수 WTSQueryUserToken()를 사용하여 다음 사용자의 로그인 세션을 찾을 수 WTSEnumerateSessions()WTSQuerySessionInformation()을 사용합니다.
    • 사용자가 현재 로그인되어 있지 않지만 사용자의 로그인 자격 증명이있는 경우 사용자 토큰을 얻으려면 LogonUser()으로 계정에 로그인 한 다음 폴더 경로를 쿼리하기 전에 LoadUserProfile()으로 사용자 프로필을 메모리에로드 할 수 있습니다.
관련 문제