일부 작성자가 자신의 Windows 응용 프로그램을 단일 인스턴스로 설정했다고 가정합니다. 이 응용 프로그램의 여러 인스턴스를 만들 수있는 방법이 있습니까 (가상 컴퓨터에서 실행하거나 작성자에게 응용 프로그램을 다시 작성하도록 요청하는 것 제외)?
기성품 도구가 있다면 알고 싶습니다. (나는 운이없이 sandboxie와 Altiris SVS를 시도했습니다).
거기에 아무것도 없다면, 내가 할 수있는 도구 / 해킹을 프로그래밍하고 싶습니다. 어디서부터 시작해야하는지, 어떤 기술이 필요할지에 대한 포인터를 찾고 있습니다. 나는 C와 Java에서 적당한 프로그래밍 기술을 가지고있다.
이를 수행 할 수없는 경우 이유를 설명하십시오.
편집 : 나는 그 나쁜 생각을 알고 있지만 (여러 가지 이유로) 여전히해야합니다. 모든 응용 프로그램에서 작동하고 오류가 발생하지 않는 일반적인 방법을 원합니다.
답변
많은 응용 프로그램이 전체 프로세스 목록 (EnumProcesses, OpenProcess, GetModuleBaseName 및 이와 유사한 기능 포함) 또는 창 목록 (EnumWindows, EnumChildWindows 사용)을 확인합니다.
후크를 설정 (샘플 SetWindowsHookEx, CallNextHookEx 등 참조)하여 해당 애플리케이션에서 해당 특정 API 함수 호출을 후크하고 요청 된 데이터를 사용자의 응답으로 대체하여 애플리케이션을 속이려고 할 수 있습니다.
답변
응용 프로그램마다 다른 방법을 사용하기 때문에 일반적인 방법은 없습니다. 많은 방법들이 기계 전체 (또는 적어도 사용자 전체)의 리소스 (예를 들어, 명명 된 동기화 객체, 잘 알려진 이름과 위치를 가진 파일 또는 레지스트리 값)를 얻는 것을 포함합니다. 앱이 성공하면 실행되는 동안 해당 리소스를 보유합니다. 다른 인스턴스가 이미 리소스를 보유하고있어 실패하면 원래 인스턴스에 신호를 보내 응답 할 수 있습니다.
16 비트 Windows에서 프로그램이 시작되면 OS는 HINSTANCE라는 고유 한 핸들을 전달했습니다. 또한 동일한 실행 파일 (있는 경우)을 사용하여 현재 실행중인 프로세스의 HINSTANCE에 전달됩니다. 당시에는 아마도 사본이 이미 실행 중인지 프로그램이 알 수있는 가장 일반적인 방법 일 것입니다. 보호 된 메모리, 프로세스 특정 주소 공간 및 협업 멀티 태스킹이 종료 된 32 비트 Windows에서 HINSTANCE는 더 이상 같은 의미를 갖지 않았습니다.
소수의 응용 프로그램은 단순히 “사용성”을 위해이 작업을 수행하지만 다른 응용 프로그램에서는 싱글 톤을 적용 할만한 이유가있을 수 있습니다. 이를 우회하면 데이터가 손상되거나 단순히 실행되지 않을 수 있습니다.
답변
다른 사용자 계정에서 애플리케이션을 실행할 수 있으며 더 이상 인스턴스 확인이 작동하지 않습니다.
답변
것이 가능하다!
다음은 모두 동일한 LAN 서버에 연결된 4 개의 창에서 반감기 1 4x를 실행하는 이미지입니다. 유일한 문제는 컨트롤러가 각 창에 독립적으로 연결되지 않는다는 것입니다.
https://web.archive.org/web/20150315150158if_/http://img29.imageshack.us/img29/5642/yc0y.jpg
이를 위해서는 ‘Process Explorer’가 필요합니다. ‘\ BaseNamedObjects \ ValveHalfLifeLauncherMutex’하위 프로세스 또는 ‘프로세스 닫기’라는 작업을 수행 할 수있는 프로그램입니다. 그렇게 어렵지 않습니다. 자세한 지침은 여기로 이동 -http : //am.half-lifecreations.com/forums/index.php ? topic=479.0
그러나 그렇습니다. 반감기는 아니지만 프로세스 탐색기를 사용하면 여러 번 실행하려는 프로그램을 얻기 위해 닫아야하는 핸들 / 프로세스를 찾을 수 있습니다.
어쨌든 Windows가 분할 / 스냅에서 여러 번 실행중인 게임을 기능으로 구현하지 않는 이유를 모르겠습니다! 사람들이 많은 PC를 사지 않을 것이기 때문에 분명히 … 또한 SoftXSpand를 정말 멋지게 확인하십시오. 독립 사용자로 여러 인스턴스의 창을 실행할 수 있습니다
답변
잠금 파일, 명명 된 파이프 및 동기화 이벤트는 애플리케이션이 유일하게 실행중인 인스턴스인지 확인하기 위해 사용하는 일반적인 방법 중 일부입니다. 잠금 파일을 해결하려면 파일 시스템을 가상화하거나 파일 시스템에 연결하거나 신중하게 시간을 삭제해야합니다 (파일을 열어두면 작동하지 않을 수도 있음). 명명 된 파이프 및 동기화 이벤트는 응용 프로그램 외부에서 파일을 사용하는 것과 동일한 제어권을 가지지 않기 때문에 훨씬 더 어려워집니다.
답변
Windows 8 이상에서는 Shift 키를 누른 상태에서 작업 표시 줄의 프로그램 아이콘 / 버튼을 클릭하십시오. 실행 파일이 다시 시작됩니다. 앱이 클론을 자체 검사하지 않으면 새 창이 생깁니다.
이것은 내부 sqlite 파일과 같이 앱 내부 파일이 열리면 앱 내부 파일과 충돌을 일으킬 가능성이 있으므로 실제로 수행중인 작업을 알고 있거나 문제가 발생하더라도 걱정하지 않아야합니다.