2011-08-02 5 views
2

내 프로젝트는 훨씬 더 큰 프로젝트에 대한 플러그인입니다. 큰 프로젝트의 버그로 인해 응용 프로그램이 중단되는 파일이 생성됩니다. 그들은 이미이 문제를 인식하고 있으며 문제를 해결하고 있지만 그 동안에는 각 사용자의 appdata 디렉토리에서 특정 파일을 삭제하는 방법 밖에 없습니다.모든 사용자 AppData 디렉토리 찾기

더 작은 플러그인을 설치하는 동안 모든 사용자의 appdata 디렉토리로 이동하여 문제가있는 파일 (있는 경우)을 삭제할 계획입니다. 각 사용자의 appdata 디렉토리를 찾을 방법이 있습니까? 이것은 설치이므로 관리자 권한이 있음을 기억하십시오. 내가 본 것들 중 일부는 다음 그냥 어떻게 든 내가하는 방법을 확실하지 오전을 IntPtr을지고의 문제가 될 것이다

WindowsIdentity.Impersonate(IntPtr someUser) 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

을 사용하는 것입니다.

내가 지금 가지고있는 최상의 해결책입니다. 그렇다면 각 사용자의 IntPtr은 어떻게 얻습니까? 아니면 더 나은 해결책이 있습니까?

내가 생각할 수있는 다음 가장 좋은 점은 단순히 C:\Users\eachUser\AppData\의 모든 디렉토리를 살펴보고 파일을 그대로 삭제하는 것입니다. 하지만 다시 XP에서 위치는 C:\Documents and Settings\eachUser\Application Data\이어야하며 필자는 운영 체제 별 코드를 만들 것입니다. 제안?

WindowsIdentity.Impersonate Method (IntPtr userToken)에서

답변

4

:

를 IntPtr 경우 UserToken은 ...

윈도우의 핸들은 토큰을 차지한다. 이 토큰은 일반적으로 Win32 API LogonUser 함수 호출과 같이 비 관리 코드 호출을 통해 검색됩니다.

모든 사용자 이름과 암호가 없으면 이렇게 할 수 없습니다.

편집 : 현재 사용자의 런타임에 파일을 삭제하지 않으시겠습니까? 플러그인이이를 수행 할 권한이 있습니까?

편집 2 : Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)에서 설치 사용자의 디렉터리를 사용하고 Directory.GetDirectories을 사용하여 프로필이있는 다른 사용자를 찾을 수 있습니다. 그런 다음 특수 폴더 이름을 집어 넣을 수 있습니다. 꽤 둥글었지만 "핀치"에서 작동 할 수도 있습니다.

+0

우리 플러그인은 더 큰 응용 프로그램에서 실행되며 더 큰 응용 프로그램은 코드를 실행하기 전에 충돌합니다. 그것은 우리의 플러그인이 거기에있을 것을 기대하지 않기 때문에 우리가 삭제하고있는 파일이 플러그인 목록을 가지고있는 파일이기 때문에 충돌하기 때문에 플러그인 목록을 재생성해야합니다. – SaulBack

+0

그런 다음 내 Edit2가 가장 좋은 옵션이라고 생각합니다. –

+0

나는 이것을하기의 방법에 관하여 추악한 원을해야 한 ㄴ다는 것을 두려워했다. 그래도 도움을 주셔서 감사합니다. – SaulBack

관련 문제