2012-04-24 4 views
0

편집 : "내 문서"대신 "문서"를 사용하면 오류가 제거됩니다. 또한 절대 경로 대신 Windows 특수 폴더를 사용하는 것이 좋습니다.이 액세스 거부 오류의 원인은 무엇입니까?

내 바탕 화면의 모든 바로 가기를 자신의 바로 가기 버전을 가진 필자가 작성한 응용 프로그램으로 바꾸려고합니다. 새로운 단축키에 이전 기능과 동일한 기능을 추가 할 계획입니다. 다른 작업을하기 전에 바로 가기가 가리키는 파일이나 폴더를 여는 것이 중요하다고 생각했습니다. 여기에 코드의 샘플 조각입니다 :

public partial class Form1 : Form 
{ 
    Process p1, p2, p3, p4; 

    public Form1() 
    { 
     InitializeComponent(); 
     p1 = new Process(); 
     p2 = new Process(); 
     p3 = new Process(); 
     p4 = new Process(); 

     p1.StartInfo.FileName = "cmd"; 
     p2.StartInfo.FileName = "c:\\Users\\Cheese\\My Documents"; 
     p3.StartInfo.FileName = "c:\\Users\\Cheese\\AppData"; 
     p4.StartInfo.FileName = "c:\\Program Files (x86)"; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     p1.Start(); 
    } 
    private void button2_Click(object sender, EventArgs e) 
    { 
     p2.Start(); 
    } 
    private void button3_Click(object sender, EventArgs e) 
    { 
     p3.Start(); 
    } 
    private void button4_Click(object sender, EventArgs e) 
    { 
     p4.Start(); 
    } 

} 

Access Denied error

이 윈도우 7 홈 프리미엄에 있습니다. Visual C# 2010 Express에서 디버깅하는 동안 오류가 발생합니다. System32, AppData 및 여러 폴더 같은 다른 폴더를 같은 드라이브의 다른 파티션에 열었습니다. 다양한 음악 파일을 열고 다른 프로그램을 실행할 수있었습니다. 내 문서를 제외한 모든 것이 정상적으로 작동하는 것 같습니다. Windows 폴더에는 개인 파일의 기본 위치보다 큰 제한이 있다고 생각합니다. 나는 그것이 실제로 권한 일이 아니라고 생각하고 있지만, 나는 심지어 그 문제가 무엇인지 추측 할 수 없다. 내 문서를 탐색기로 열 수 있습니다. 디렉토리간에 파일을 이동할 수 있습니다.

이렇게 간단한 것 같습니다. Windows가 어떻게 작동하는지 완전히 이해하지 못한다는 것을 많이 알고 있습니다. 그러나이 상황과 다른 몇몇 사람들은 Windows에 대해별로 알지 못한다고 생각합니다. 이 운영 체제를 잘 이해하기 위해 살펴볼 수있는 좋은 책이나 웹 리소스는 무엇입니까? 초보자의 관점에서 파일 관리 및 시스템 권한에 중점을 둘 가능성이 있습니까?

+0

Windows 7에서 "내 문서"는 "문서"에 대한 연결 링크이므로 접합점에서의 프로세스 시작 문제 일 수 있습니다. "c : \\ Users \\ Cheese \\ Documents"를 시작하면 같은 오류가 발생합니까? –

+0

사용자 프로필에서 해당 폴더를 찾으려고 했습니까? – Steve

+0

솔루션이 얼마나 간단한 지 거의 불쌍합니다."내 문서"대신 "문서"를 사용하면됩니다. – Cheese

답변

1

으로 윈도우 7에서

댓글을 달았습니다 "내 문서" "문서", 접합의 프로세스를 시작하려고하면이 오류와 함께 실패 할 수있는 접합 링크입니다. 대신 "c : \ Users \ Cheese \ Documents"를 실행하십시오.

현재 사용자가 내 문서 폴더에 있다면 실제로 시스템에 경로를 요청해야합니다.

var path=System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments); 
1

Windows 7에서는 "내 문서"의 이름이 단순히 "문서"로 바뀌 었습니다. Wikipedia을 참조하십시오. 열려는 경로가 OS에 존재하지 않습니다.

+0

글쎄, 그건 기술적으로 존재하지, 그것의 바로 그 지점은, 당신이 시도하고 프로세스로 시작 실패합니다. –

+0

나는 그렇게 생각하지 않는다. 적어도 dir은 이와 같은 것을 표시하지 않습니다. 그리고 junction sysinternals 명령은 거기에 접합점을 찾지 않습니다. 그러나 내 문서 아래를 탐색하고 내 문서 내의 파일을 마우스 오른쪽 버튼으로 클릭하면 경로가 실제로 .. \ Documents \ ... 인 것으로 나타납니다. Windows 7은 내 문서 교차점을 만들지 않지만 탐색기 자체는 변환 된 폴더를 표시합니다 사용자 이름 내 독일 기계에서는 "Eigene Dokumente"라고 불리며 거기에는 그런 폴더가 없습니다. –

+0

http://en.wikipedia.org/wiki/Special_folder -이 링크에는 % My Documents의 특수 폴더 위치에 대한 % USERPROFILE % \ Documents가 표시됩니다. 그런 다음 맨 아래에 가상 폴더를 표시하는 테이블이 있습니다. "내 문서"는 가상 폴더로도 존재합니다. ** "사용자의 내 문서 폴더의 가상 폴더로 데스크톱 가상 폴더의 하위 폴더로 사용됩니다."** 특별 폴더와 가상 폴더에 대해 잘 알고 있지만 내 문서가 어떻게 될 수 있는지 완전히 이해하지 못합니다. . – Cheese

2

하드 코드 된 경로를 사용하지 마십시오.
그와 함께 갈 수있는 올바른 방법은 found here

그것은 를 사용하는 것이 매우 중요합니다 될 수있는이

string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

다른 'SpecialFolder'열거 같은 Environment.GetFolderPath (와 결합 Environment.SpecialFolder 열거)입니다 GetFolderPath은 SpecialFolder 열거 형과 함께 다른 운영 체제, 운영 체제의 현지화 및 사용자가 이러한 위치 중 일부에서 수행 할 수있는 변경 사항에 맞게 올바르게 조정 된 위치를 반환하기 때문에 함께 사용됩니다.

+0

고마워요, 제가 살펴 보겠습니다. – Cheese

+0

위의 코드에서 "cmd"가 지정된 경로없이 시작할 수있는 이유는이 (특수 폴더)입니까? 나는 파일 이름에 확장자가 없다. – Cheese

+1

cmd.exe는 명령 셸 인터프리터이며 시스템 PATH 환경 변수에 포함 된 폴더에 있습니다. 따라서 운영 체제는 PATH의 각 폴더에서 CMD로 시작하는 프로그램 (bat, cmd, com 또는 exe)을 검색합니다. "메모장"으로 시도하면 동일합니다. – Steve

관련 문제