2016-11-21 1 views
0

Windows + R 또는 "start"명령은 매우 강력합니다. Windows + R "크롬"으로 Chrome을 시작할 수 있습니다. 그러나 실행중인 cmd.exe에 "chrome"을 입력하면 크롬이 시작되지 않습니다. PATH에 나열되어 있지 않기 때문입니다. 그래서 나는 "Run"이 무엇을 시작할지를 찾는 곳이 궁금합니다."Windows Run"은 실행할 항목을 알고 있지만 cmd.exe는 그렇지 않습니다.

프로그래밍 방식으로 동일한 정보를 얻으 려하고 있습니다. 지금까지 "genericCommand"또는 "genericCommand .exe"가 PATH 디렉터리 중 하나에 있는지 확인하는 것이 좋습니다. "메모장", "mspaint"등에서 작동하지만 "크롬"에는 적합하지 않습니다.

Windows 실행 또는 "시작"명령으로 시작할 때 실행되는 프로그램에 프로그래밍 방식으로 지정된 명령을 매핑하고자합니다.

왜? 어떤 아이디어?

답변

2

레지스트리 키에서 살펴 보자 :

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 

이 명령의 대체 목록 (% 경로 % 디렉토리에서 응용 프로그램에 추가)이다

일부 기본값을 무시할 수있는 곳입니다 - 예를 들어, cmd.exe를 cmdr.exe로 대체하려고합니다.

내가 이것을 사용하는 또 다른 예는 메모장 ++ .exe에 대해 "np"별칭을 추가하는 것입니다. 기본 값이 "C : \ Program Files (x86) \ Notepad ++ \ notepad ++. exe"인 "np.exe"라는 하위 키를 만듭니다. 그래서 실행 대화 상자에서 "np c : \ temp \ something.txt"를 입력하고 np ++에서 열 수 있습니다.

이 레지스트리 키의 내용은 % PATH %에있는 것보다 높은 우선 순위로 간주됩니다. 그래서 cmd.exe와 다른 cmd.exe를 여기에 추가하여 무시할 수 있습니다.

1

많은 Thx. 그건 내가 생각 해낸 무엇 :

private static string GetCommandPathFromRegistry(string commandNameWithExeEnding) 
    { 
     var localMachineRegistryKey = Registry.LocalMachine; 
     localMachineRegistryKey = localMachineRegistryKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"); 
     var commandSubKey = localMachineRegistryKey.OpenSubKey(commandNameWithExeEnding); 
     return commandSubKey?.GetValue("")?.ToString(); 
    } 

BR 마티아스

+1

코드는 괜찮지 만, 그것은 완전하지 않습니다. [실행 파일을 검색하는 "START"는 어디에 있습니까?] (http://stackoverflow.com/a/27386403/3074564) 및 [XML 파일을 일반 텍스트로 열 수있는 모든 프로그램을 열거하는 방법은 무엇입니까?] (http : /stackoverflow.com/a/31603179/3074564) – Mofi

+0

알겠습니다. 고마워. 시작 프로그램이 시작될 프로그램 이름을 얻을 방법이 없다는 것은 수치 스럽습니다. 매개 변수와 비슷합니다. 나는 시작의 모든 특징을 복제하는 것 같지 않습니다. : – Matthias

+0

글쎄, Visual C++에서 [ShellExecuteEx] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb762154.aspx) 함수를 사용하여 알 수없는 경로에서 응용 프로그램을 실행할 수 있습니다. 'start'와 같은 C++ 코드화 된 응용 프로그램에서는 명령 행에서 수행합니다. – Mofi

관련 문제