다른 주제를 보았는데 다른 문제가 있습니다. 프로세스가 시작되고 있지만 (작업 관리자에서 본) 폴더가 화면에서 열리지 않습니다. 뭐가 문제 야?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
다른 주제를 보았는데 다른 문제가 있습니다. 프로세스가 시작되고 있지만 (작업 관리자에서 본) 폴더가 화면에서 열리지 않습니다. 뭐가 문제 야?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
답변:
" c:\teste
" 폴더 가 존재 하는지 확인 했습니까 ? 그렇지 않으면 탐색기에서 기본 폴더 (내 경우에는 " C:\Users\[user name]\Documents
")가 표시됩니다.
최신 정보
나는 다음과 같은 변형을 시도했다.
// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");
이 중 어느 것도 (예외를 던지는 것을 제외하고) 컴퓨터에서 작동하지 않으면 문제는 코드가 아니라 환경에 있다고 생각합니다. 이 경우 다음 중 하나 (또는 둘 다)를 시도합니다.
Process.Start(path)
창을 활성화합니다 (작업 표시 줄에서만 깜박이고 앞쪽으로 가져 오지 않음). explorer.exe
+ parameter는 항상 앞쪽에 새 창을 엽니 다 (그러나 같은 창에 여러 번). 둘 다 경고가 있습니다.
Process.Start(@"c:\temp")
주의해서 사용해야합니다. c:\temp.com
존재하는 경우 함수 호출이 c:\temp.com
대신 열립니다 . 자세한 내용은 forums.iis.net/p/1239773/2144186.aspx 를 참조하십시오.
Process.Start(@"c:\temp")
같은 다른 폴더를 여는 취약 C:\temp.exe
나 C:\temp.cmd
. VS 자체가 버그가있는 동작을 나타내는이 문제를 참조하십시오 . explorer.exe
변형을 사용하거나 (더 나은 IMO) 항상을 추가 하여이를 피할 수 있습니다 Path.DirectorySeparatorChar
. 예를 들면 다음과 같습니다 Process.Start(@"C:\temp\")
.
완전성을 위해 폴더를 열려면 다음을 사용하십시오.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Path.DirectorySeparatorChar
폴더를 가리 키도록 FileName으로 끝나는 지 확인하십시오 . (@binki에게 감사합니다.)
이 솔루션은 동사를 나타내지 않으므로 폴더를 열고 항목을 선택하는 데는 작동하지 않습니다.
C:\teste.exe
하거나 이와 같은 폴더를 사용하면 C:\teste.cmd
탐색기가 원하는 폴더 대신 다른 폴더로 열립니다. 이를 피하기 위해 Path.DirectorySeparatorChar
경로에 a 를 추가 할 수 있습니다 . VS 자체가 어떻게 같은 실수를하는지 보십시오 .
Verb = "select"
있지만 아쉽습니다 . 어쨌든 큰 대답입니다!
Verb = "open"
이 필요하지 않았습니다. (Windows에서 테스트 한 결과, 다른 OS는 다를 수 있습니다.)
@ 기호를 사용하면 백 슬래시를 피할 필요가 없습니다.
@를 제거하거나 \\를 \로 바꿉니다.
System.Diagnostics.Process.Start()
과부하 중 하나를 사용해야합니다 . 아주 간단합니다!
실행하려는 프로세스의 파일 이름 ( explorer.exe
) 을 저장하지 않으면 시스템은 파일 이름을 유효한 폴더 경로로 인식하고 이미 실행중인 Explorer 프로세스에 연결하려고 시도합니다. 이 경우 폴더가 이미 열려 있으면 탐색기에서 아무 작업도 수행하지 않습니다.
프로세스의 파일 이름을 배치 한 경우 시스템은 프로세스의 새 인스턴스를 실행하여 두 번째 문자열을 매개 변수로 전달합니다. 문자열이 유효한 폴더 인 경우 새로 만든 프로세스에서 열리 며 그렇지 않은 경우 새 프로세스는 아무 작업도 수행하지 않습니다.
어떤 경우에도 유효하지 않은 폴더 경로가 프로세스에 의해 처리되는 방법을 모르겠습니다. 사용 System.IO.Directory.Exists()
하기에 충분해야합니다.
Path.DirectorySeparatorChar
. 이름은 같지만의 폴더 그렇지 않은 경우, .cmd
또는 .exe
또는 가능한 다른 접미사도 존재 탐색기가 열립니다 다른 폴더 또는 그 실제로 실행 파일 또는 스크립트 경우, 그것은을 실행하는 대신 당신이 의도 한대로 폴더를 열어입니다.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
이 코드는 VS2010 환경에서 제대로 작동하고 로컬 폴더를 올바르게 열지 만 IIS에서 동일한 응용 프로그램을 호스팅하고 열려고하면 확실히 실패합니다.
이상한.
explorer.exe를 찾을 수 없으면 예외가 발생합니다. 폴더를 찾을 수없는 경우 여전히 일부 폴더 (예 : 내 문서)를 열어야합니다.
작업 관리자에 다른 탐색기 사본이 표시되지만 볼 수는 없습니다.
오프 스크린 (예 : 다른 모니터)을 열 수 있습니까?
아니면 비 대화식 서비스에서이 작업을 수행하고 있습니까?
시작 메뉴에서 "explorer.exe c : \ teste"를 실행할 때 제대로 열립니다? 얼마나 오랫동안 노력 했습니까? 컴퓨터에 많은 프로세스가 있고 새 프로세스를 열 때 (IE라고 말하면) 비슷한 동작이 나타납니다. 작업 관리자에서 시작되지만 프런트 엔드에는 표시되지 않습니다. 다시 시작 했습니까?
다음 코드는 새 탐색기 인스턴스를 열어야합니다.
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
이것을 시도 할 때 많은 응용 프로그램이 실행되고 있습니까? 창을 너무 많이 열어서 (앱이 많이 사용하는) 시스템에 GDI 핸들이 부족하여 때때로 이상한 동작이 발생합니다.
이런 일이 발생하면 GDI 핸들을 해제하기 위해 무언가를 닫을 때까지 창과 상황에 맞는 메뉴가 더 이상 나타나지 않습니다.
XP 및 Vista의 기본 제한은 10000입니다. DevStudio에서 1500 개의 GDI 핸들을 갖는 것은 드문 일이 아니므로 Dev studio 사본이 두 개 있으면 꽤 빨리 먹을 수 있습니다. TaskManager에 열을 추가하여 각 프로세스에서 사용중인 핸들 수를 확인할 수 있습니다.
한계를 늘리기 위해 할 수있는 레지스트리 조정이 있습니다.
자세한 내용은 http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx를 참조하십시오 .