모든 Windows 응용 프로그램의 여러 인스턴스 실행


11

일부 작성자가 자신의 Windows 응용 프로그램을 단일 인스턴스로 설정했다고 가정합니다. 이 응용 프로그램의 여러 인스턴스를 만들 수있는 방법이 있습니까 (가상 컴퓨터에서 실행하거나 작성자에게 응용 프로그램을 다시 작성하도록 요청하는 것 제외)?

기성품 도구가 있다면 알고 싶습니다. (나는 운이없이 sandboxie와 Altiris SVS를 시도했습니다).

거기에 아무것도 없다면, 내가 할 수있는 도구 / 해킹을 프로그래밍하고 싶습니다. 어디서부터 시작해야하는지, 어떤 기술이 필요할지에 대한 포인터를 찾고 있습니다. 나는 C와 Java에서 적당한 프로그래밍 기술을 가지고있다.

이를 수행 할 수없는 경우 이유를 설명하십시오.

편집 : 나는 그 나쁜 생각을 알고 있지만 (여러 가지 이유로) 여전히해야합니다. 모든 응용 프로그램에서 작동하고 오류가 발생하지 않는 일반적인 방법을 원합니다.


3
Windows 응용 프로그램은 기본적으로 싱글 톤이 아닙니다. 만약 그렇다면, 그것은 누군가가 그것을 싱글 톤으로 만들기 위해 추가적인 노력을 기울였으며 아마도 그렇게 할 이유가 있음을 의미합니다.
silico에서

1
응용 프로그램이 여러 복사본을 확인하는 방법에 따라 다릅니다. 다양한 응용 프로그램이 다른 방식으로 확인되며 일부 응용 프로그램은 여러 가지 방법으로 확인됩니다.
ho1

Silico에서 말했듯이, 아마도 좋은 생각이 아닙니다. 의도하지 않은 상태에서 여러 복사본을 실행하면 앱이 데이터를 손상 시키거나 충돌하거나 다른 문제를 일으킬 수 있습니다.
ho1

프로세스가 단일 인스턴스 만 실행할 수있는 방법에는 여러 가지가 있습니다. 나는 이것을 막을 수있는 일반적인 도구를 만드는 것이 가능하다고 생각하지 않습니다. 각 응용 프로그램을 개별적으로 검사하고 특별히 맞춤화 된 것을 작성해야합니다.

해결책을 찾았습니까?
Tomas

답변:


2

많은 응용 프로그램이 전체 프로세스 목록 (EnumProcesses, OpenProcess, GetModuleBaseName 및 이와 유사한 기능 포함) 또는 창 목록 (EnumWindows, EnumChildWindows 사용)을 확인합니다.

후크를 설정 (샘플 SetWindowsHookEx, CallNextHookEx 등 참조)하여 해당 애플리케이션에서 해당 특정 API 함수 호출을 후크하고 요청 된 데이터를 사용자의 응답으로 대체하여 애플리케이션을 속이려고 할 수 있습니다.


모든 답변에 감사드립니다. 도구에는 신중한 디자인이 필요하다고 생각합니다. 구상 된 도구는 전체 창 사본을 실행하지 않고 모든 응용 프로그램을 속이는 매우 가벼운 가상 OS 환경과 다소 비슷해야합니다.
Jus12

4

응용 프로그램마다 다른 방법을 사용하기 때문에 일반적인 방법은 없습니다. 많은 방법들이 기계 전체 (또는 적어도 사용자 전체)의 리소스 (예를 들어, 명명 된 동기화 객체, 잘 알려진 이름과 위치를 가진 파일 또는 레지스트리 값)를 얻는 것을 포함합니다. 앱이 성공하면 실행되는 동안 해당 리소스를 보유합니다. 다른 인스턴스가 이미 리소스를 보유하고있어 실패하면 원래 인스턴스에 신호를 보내 응답 할 수 있습니다.

16 비트 Windows에서 프로그램이 시작되면 OS는 HINSTANCE라는 고유 한 핸들을 전달했습니다. 또한 동일한 실행 파일 (있는 경우)을 사용하여 현재 실행중인 프로세스의 HINSTANCE에 전달됩니다. 당시에는 아마도 사본이 이미 실행 중인지 프로그램이 알 수있는 가장 일반적인 방법 일 것입니다. 보호 된 메모리, 프로세스 특정 주소 공간 및 협업 멀티 태스킹이 종료 된 32 비트 Windows에서 HINSTANCE는 더 이상 같은 의미를 갖지 않았습니다.

소수의 응용 프로그램은 단순히 "사용성"을 위해이 작업을 수행하지만 다른 응용 프로그램에서는 싱글 톤을 적용 할만한 이유가있을 수 있습니다. 이를 우회하면 데이터가 손상되거나 단순히 실행되지 않을 수 있습니다.


3

다른 사용자 계정에서 애플리케이션을 실행할 수 있으며 더 이상 인스턴스 확인이 작동하지 않습니다.


2

것이 가능하다!

다음은 모두 동일한 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를 정말 멋지게 확인하십시오. 독립 사용자로 여러 인스턴스의 창을 실행할 수 있습니다


돌연변이 핸들을 닫으면 저에게 효과적입니다. 반감기는 아니지만 프로그래머 측에서 뮤텍스를 사용하는 것이 일반적 이므로이 솔루션은 일반적입니다.
AZ.

1

잠금 파일, 명명 된 파이프 및 동기화 이벤트는 애플리케이션이 유일하게 실행중인 인스턴스인지 확인하기 위해 사용하는 일반적인 방법 중 일부입니다. 잠금 파일을 해결하려면 파일 시스템을 가상화하거나 파일 시스템에 연결하거나 신중하게 시간을 삭제해야합니다 (파일을 열어두면 작동하지 않을 수도 있음). 명명 된 파이프 및 동기화 이벤트는 응용 프로그램 외부에서 파일을 사용하는 것과 동일한 제어권을 가지지 않기 때문에 훨씬 더 어려워집니다.


0

Windows 8 이상에서는 Shift 키를 누른 상태에서 작업 표시 줄의 프로그램 아이콘 / 버튼을 클릭하십시오. 실행 파일이 다시 시작됩니다. 앱이 클론을 자체 검사하지 않으면 새 창이 생깁니다.

이것은 내부 sqlite 파일과 같이 앱 내부 파일이 열리면 앱 내부 파일과 충돌을 일으킬 가능성이 있으므로 실제로 수행중인 작업을 알고 있거나 문제가 발생하더라도 걱정하지 않아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.