2013-05-22 4 views
0

(첫 번째 :이 질문은 다른 많은 질문과 매우 유사하지만 다른 곳에서는 본 적이없는 제 2의 요구 사항이 있습니다.)내 앱의 한 인스턴스에서 탐색기에서 파일 한 배치를 열고 두 번째 인스턴스에서 별도의 배치를 열 수 있습니까?

사용자가 작업을 수행 할 수있는 앱을 만들고 있습니다. (메타 데이터 조정, 다른 위치로 전송, 향후 다른 것들을 포함 할 수도 있음). 많은 경우 한 번에 많은 파일에 동일한 작업이 수행되기 때문에 사용자가 여러 파일을 선택한 경우 마우스 오른쪽 버튼을 클릭하여 어떤 종류의 작업을 사용할 수 있습니다. 그 컨텍스트 메뉴 및 모든 선택된 파일 & 폴더는 대량 처리를 위해 내 응용 프로그램에 전달됩니다.

여기에 까다로운 부분이 있습니다. 사용자가 한 세트의 파일에서이 대량 처리를 수행하는 동안 다른 파일 세트를 선택하고 다른 대량 처리 작업을 설정하고 계속 보관해야합니다. 첫 번째 일괄 처리에서 수행 한 작업이 두 번째 일괄 처리에 적절하지 않을 수 있기 때문에 두 일괄 처리는을 분리합니다.

두 번째 요구 사항은 문제가있는 부분입니다. 두 개의 일괄 처리가 하나의 일괄 처리로 일괄 처리되기 때문에 정상적인 싱글 톤을 수행 할 수 없습니다. 이는 내 사용자에게 매우 나쁜 일입니다. 그러나 지금까지는 하나의 인스턴스에서 하나의 파일 배치를 열고 다른 인스턴스에서 새로운 배치를 열 수있는 우아한 방법을 찾지 못했습니다.

몇 가지 옵션을 생각해 냈습니다. 첫째, 내 앱이 시작될 때 다른 인스턴스를 검색하고 차례대로 각 인스턴스와 통신하여 시작한 시간을 확인하고 시간이 가까워 졌는지 확인했습니다. 이 인스턴스를 함께 사용하면 이전 인스턴스를 우선적으로 종료 할 수 있습니다. 두 번째 옵션은 어떻게 든 고유 한 작업 식별자를 명령 행 인수에 추가하는 것입니다. 첫 번째 옵션과 마찬가지로 앱이 시작될 때 자체의 다른 인스턴스를 찾고 마스터 인 것을 찾으려합니다 (아마도 뮤텍스 이름의 일부로 식별자를 사용하여 어느 것이 먼저 있는지 쉽게 알아낼 수 있습니다) . 또 다른 옵션은 나를 위해 목록을 묶어서 한꺼번에 내 앱에 목록을 전달하는 셸 확장을 만드는 것입니다 (솔직히 말해서 이것이 작동한다면 확실하지 않습니다 ...)

Of 내가 생각해 낸 아이디어는 # 2가 분명히 내 취향이다. 그것은 C#의 모든 코드를 유지합니다. 즉, 팀의 모든 사람이 코드를 유지 관리 할 수 ​​있으며 명령을 일괄 적으로 그룹화 할 수있는 방법을 제공합니다. 유일한 문제는 하나의 마우스 오른쪽 버튼 클릭 동작에서 내 앱을 시작하려는 모든 시도에 대해 일관성이있는 각 인스턴스에 대해 arg에 일부 ID를 추가하는 방법을 알지 못하지만 각 사용자마다 다를 수 있다는 것입니다. 별도의 마우스 오른쪽 버튼 클릭 + 열기 (또는 무엇이든)를 수행합니다. 어쩌면 나는 셸 확장을 통해 그것을 할 수 있을까?

누군가 이런 일이 발생하는 방법에 대한 제안 사항이 있으면 정말 감사하겠습니다. 나는 단지 솔루션에 도전해야만하는 경우에 끝내기 쉬운 책임이있는 합리적으로 우아하고 견고한 솔루션을 선호합니다. 내가 함께 ...

왔어요 무엇

답변

0

는 여기에 내가 C++ Windows Shell context menu handler (CppShellExtContextMenuHandler)에서 코드 샘플을 가져다가 상당히을 조정합니다. 내 경우에는 사용자가 파일과 폴더의 모든 조합에 대해이 작업을 수행 할 수 있어야하므로 * 및 Directory에 대한 작업을 시작했습니다. 그런 다음 명령으로 메시지 상자를 표시하는 대신 리디렉션 된 표준 입력과 함께 CreateProcess를 사용하도록 변경했습니다 (예 : here). 일단 프로세스가 생성되면, 파일리스트를 한 줄에 하나씩 파이프에 씁니다. (잠재적 인 경쟁 문제를 피하기 위해 프로세스를 시작하기 전에 전에 파이프 에 파일 목록을 쓰도록 변경하려고합니다.) 내 대상 응용 프로그램은 단순히 데이터가 부족할 때까지 콘솔 행을 읽습니다 , 그 파일 목록을 사용합니다.

더 길고 위험한 프로세스입니다. 확장을 코딩하는 데 실수로 인해 테스트 중에 셸을 두 번 충돌했습니다! -하지만 정확히 내가 원하는 것을 제공합니다. 익스플로러에서 파일 집합을 마우스 오른쪽 버튼으로 클릭하고 내 앱의 동일한 인스턴스에서 파일을 열어 다른 파일 세트를 마우스 오른쪽 버튼으로 클릭 한 다음 별도의 인스턴스에서 열립니다.

물론 제가 을 가지고 있기 때문에 대답은 그것이 인 것을 의미하지 않습니다. 대답은입니다. 다른 사람들이 더 나은 것을 함께 제공하는 경우 이것을 잠시 동안 최종 답으로 표시하지 않을 것입니다. 지옥, 비록 당신의 대답이 이 더 좋다고 생각하지 않는다해도, 나는 그것을 듣고 싶습니다! 다른 사람들이 어떻게 문제에 접근하는지 보는 것은 항상 재미 있습니다.