2010-11-24 1 views
5

C# 콘솔 앱인 제품이 있습니다. 명령 줄에서만 실행되도록 제한 할 수 있습니까? 즉, 사용자는 스크립트 나 다른 앱에서 호출 할 수 없습니다.C# : 콘솔 앱 호출 방법 제한

그렇다면 일부 예제 코드가 크게 감사 할 것입니다. 감사.

+0

DOS 명령 줄 (command.com) 또는 NT 명령 줄 (cmd.exe)을 실제로 의미합니까? 아니면 어떤 콘솔 응용 프로그램이 좋습니까? – CodesInChaos

+0

그리고 무엇을 성취하려고합니까? 왜 다른 프로그램이 프로그램을 시작하지 못하게하려고합니까? – CodesInChaos

+0

@CodeInChaos : 좋은 지적입니다. 모든 콘솔 응용 프로그램이 좋습니다. 다른 제품이나 서비스의 일부로 사용되는 앱을 차단하고 싶습니다. – FunLovinCoder

답변

3

여기 제공된 코드를 사용하여 애플리케이션을 만든 프로세스를 확인할 수 있습니다 : http://msdn.microsoft.com/en-us/netframework/aa569609.aspx#Question3. DOS 명령 행에서 시작하려면 상위 프로세스는 cmd.exe 여야합니다. 그러나 콜린 (Colin)에 의해 지적 되었 듯이 배치 스크립트를 사용하면 쉽게 우회 할 수 있습니다. cmd.exe에 대한 명령 프롬프트 인수가 null인지 확인하여 해당 기능을 비활성화 할 수도 있습니다. 이를 위해서는 WMI를 사용해야합니다.
http://skysanders.net/subtext/archive/2010/04/11/using-wmi-to-fetch-the-command-line-that-started-all.aspx
또한 cmd.exe 이미지가 system32 폴더에 있는지 확인해야합니다.

+0

배치 스크립트에서 응용 프로그램을 시작한 경우 상위 프로세스는 무엇입니까? –

+0

@Colin : 스크립트 호스트입니다. 그렇지 않니? 예 : WSH – abatishchev

+0

아니요, 방금 시도했습니다. cmd.exe –

3

차이점을 말할 수 있다고 생각하지 않습니다.

물론 상위 프로세스는 유용한 지표가 아닙니다. 이것은 당신이 부모 프로세스에서 무엇을 얻을 수 있습니다 :

당신이 1. 프로그램을 시작하는 유효한 방법이 될 수 있도록, 나는 당신이 앱이 될 수 있다는 뜻 2. 중지 할 수 있습니다 생각하지 않는다하려는 경우
1. type app name into Command Prompt:  cmd.exe 
2. call app from batch script:   cmd.exe 
3. Double click on app or shortcut:  explorer.exe 
4. type app name into Run dialog box:  explorer.exe 

모든 스크립트 또는 프로그램에서 호출

가 (BTW, 사람에 유래에 테이블을 얻을 수있는 방법을 알고 있나요?) (이 간단하기 때문에 다른 프로그램은 1 개 라인 배치 스크립트를 작성하고 실행하기위한)

+0

어쨌든 조부모를 찾는거야? 그런 다음 cmd.exe가 스크립트 나 알 수없는 프로세스가 아닌 예상 한 것으로 생성되었는지 확인할 수 있습니다. – FunLovinCoder

+0

프로세스를 시작하는 데는 여러 가지 방법이 있습니다. 작업 관리자 -> 파일 -> 실행이 마음에 와서, 더 많은 것이 있다는 것을 확신합니다. – Tergiver

+0

오 예, 이것들은 예로서 만 의미가 있습니다. 작업 스케줄러는 또 다른 것입니다. –

1

를 @ swisston 다른 응용 프로그램에서 콘솔 응용 프로그램을 시작하는 경우 "이름이 지정된 커널 개체"를 사용하는 것이 좋습니다. 예를 들어 뮤텍스. 부모 앱에 명명 된 뮤텍스를 만들 수 있습니다. 그런 다음 자녀 콘솔 앱의 메인 스레드에서이 뮤텍스를 열어보십시오. 뮤텍스가 열려 있지 않으면 (찾을 수 없음) : 콘솔 응용 프로그램이 사용 권한을 계속하지하고 닫아야가) 대기, 난 당신을 위해 몇 가지 코드를 만들거야)

편집 : 그래서 그것은 매우 쉽게 전술.

Mutex mutex = new Mutex(true, "MyPermissions"); 

그런 다음 아이 콘솔 응용 프로그램 체크에 뮤텍스가 존재하는 경우 : 부모 앱에서 명명 된 뮤텍스를 만들

콘솔 응용 프로그램이 false를 돌려줍니다 부모 애플리케이션 CheckPermissions 방법없이 실행 된
static bool CheckPermissions() 
    { 
     try 
     { 
      Mutex mutex = Mutex.OpenExisting("MyPermissions"); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

경우와 콘솔을 닫아야한다;)

+1

부모 앱을 어디서나 호출 할 수 있기 때문에 이는 도움이되지 않습니다. 방금 문제를 해결하지 않고 문제를 한 단계 위로 옮겼습니다. – Tergiver

0

나는 당신이하려는 일에 동의하지 않는다. 그러나 여기서는 작동 할 수있는 아이디어가있다. 프로그램의 시작 부분에 일종의 사용자 입력이 필요하다. 보안 문자 (명령 줄에서하기가 어렵지만 이론적으로 가능합니다. 아스키 아트를 생각해보십시오.)