2016-10-21 7 views
8

Windows 10 PC에 C# 응용 프로그램이 있습니다. 설치 폴더 (C : \ Program Files (x86) \ xxx)에 설정 파일이 있습니다.이 파일은 사용자가 관리자 액세스 권한이 없으면 편집 할 수는 있지만 읽을 수는 없습니다. 문제는 Windows가이 설정 파일을 VirtualStore로 복사하고 거기에서 모든 읽기를 리디렉션하는 반면 admin과 동일한 응용 프로그램은 Program Files 폴더의 원래 설정 파일을 보게됩니다.VirtualStore를 건너 뛰고 Program Files 폴더에서 파일을 읽는 방법은 무엇입니까?

내 질문 : 응용 프로그램이 관리자로 실행되지 않을 경우에도 프로그램 파일에 원본 파일을 볼 수 있도록하는 방법이 있나요? 나는 그들을 편집하고 편집하지 않고 읽고 싶습니다.

+0

읽기만하는 경우 해당 파일의 복사 된 버전을 읽는 데 어떤 문제가 있습니까? – ChrisBint

+0

admin으로 실행하면 편집 할 수 있기 때문에이 경우 가상 저장소 버전이 아닌 프로그램 파일 폴더의 버전을 편집합니다. 따라서 비 관리자 인스턴스의 관점에서 볼 때 파일은 변경되지 않습니다. – Sugrue

+0

언제 파일을 복사합니까? – ChrisBint

답변

7

당신은 Program Files (x86) 폴더에서 파일을 읽을 높은 권한이 필요하지 않습니다. 파일을 열어 읽는 방법을 확인하십시오. 공통 사용자 모드 및 상승 모드에서 다른 FileAccess 플래그를 지정해야합니다. 일반 사용자 모드의 경우는 'FileAccess.Read`으로 열 수 있습니다 : 관리자 권한이 IsProcessElevated 방법을 사용하여 응용 프로그램을 실행하는 경우

using (FileStream settingsFile = new FileStream(@"C:\Program Files (x86)\xxx", FileMode.Open, FileAccess.Read)) 
{ 
    // Do the job 
} 

감지하기 위해. 결과에 따라 적절한 FileAccess 모드를 선택할 수 있습니다.

+0

감사합니다. 파일을 올바르게 여는 지 다시 한 번 확인하겠습니다. – Sugrue

+1

@Sugrue 응용 프로그램의 파일 트래픽을 더 잘 이해하려면 Sysinternals 제품군의 ['Process Monitor'] (https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx)를 사용할 수 있습니다. 응용 프로그램에서 요청한 각 파일에 대해 원하는 액세스 권한이 표시됩니다. – Nikita

+1

안녕하세요 Nikita - 우리는 두 번 확인했습니다. 코드의 다른 섹션에서 파일을 잘못 여는 중입니다. 모두 고쳐졌습니다. 감사, – Sugrue

1

프로그램 파일에 원본 파일을 볼 수있는 방법이 쓸 것입니다 (읽기 전용 니키타가 지적한대로에이를 열려있는 파일에). VirtualStore는 사용하지 않아도되지만 응용 프로그램 문제를 해결할 수 있습니다. 이러한 문제는 예를 들어 현재의 Windows (NT 이후)가 여러 사용자가 동시에 여러 세션을 가질 수있는 오래된 단일 사용자 Windows 용으로 작성된 응용 프로그램이 손상된 경우에 발생합니다. 응용 프로그램이 모든 사용자간에 공유 데이터 파일을 수정하고자하는 경우 모든 사용자 프로필에

, 그것은 파일을 저장해야합니다. 사용자 데이터 인 경우 사용자 프로필의 Application Data 폴더에 데이터를 저장할 수 있습니다. 응용 프로그램 데이터에서는 데이터를 로밍 또는 로컬로 유지하려는 경우 계속 옵션이 제공됩니다. 이 폴더에

경로는 다른 Windows 버전에서 다릅니다. Windows Installer의 속성은 경로로 설정되어 있습니다. 응용 프로그램에는 사용할 수있는 많은 인터페이스가 있습니다. 하나의 인터페이스에 대해 Working with Known Folders in ApplicationsSHGetKnownFolderPath을 참조하십시오. 그 외에는

는 프로그램 파일에 대한 액세스 뒤에 UAC입니다. 모든 세부 사항을 올바르게 읽으려면이 내용을 읽어야합니다.