여러 Office 문서를 열면 여러 인스턴스


9

16.0.8625.2121Office 버전 으로 시작 (Word 및 Excel로 테스트)-탐색기에서 여러 문서를 선택하고 Enter 키를 눌러 문서를 열면 이전에 선택한 문서의 개수까지 인스턴스가 생깁니다.

재현하려면 다음 단계를 수행하십시오.

  • 컴퓨터 어디에서나 2 개의 빈 Excel 통합 문서 만들기
  • 그 두 파일을 선택하십시오
  • 엔터
  • 작업 관리자를 확인하면 2 개의 Excel 인스턴스가 표시됩니다

이전 버전에서는 16.0.8625.2121인스턴스가 하나만 생겼습니다.

테스트

  • 16.0.4266.1003 -최신 버전으로 업데이트 한 것보다 오래된 이미지

    officec2rclient.exe /update user updatetoversion=16.0.xxxx.yyyy
    

새로운 빌드로 단계별로 다시 테스트했습니다.

  • 16.0.8431.2094
  • 16.0.8431.2107
  • 16.0.8528.2139
  • 16.0.8528.2147

명백한 것이 언급되기 전에, DisableMergeInstanceisnt는 설정되지 않습니다.

새로운 "기능"입니까, 아니면 버그입니까? 나는 그 버그를 믿습니다.

그 주위에 방법이 있습니까?

추가 정보 :

우리는 (항상 최신 버전) 으로이 동작을 테스트했습니다.

  • Windows 7 + Office 2016-잘못된 동작
  • Windows 10 + Office 2016-잘못된 동작

이 버전이 Office 2016 버전인지 확인하기 위해 이전 Office 버전도 확인했습니다.

  • Windows 8 + Office 2013-발생하지 않음
  • Windows 7 + Office 2010-발생하지 않음
  • Windows 10 + Office 2010-발생하지 않음
  • Windows 10 + Office 2013-발생하지 않음

답변:


6

내내 설명을 반복하면 사과하지만이 문제는 매우 복잡하여 독자에게 상황에 맞는지 확인하려고 노력했습니다.

이것이 버그인지 또는 의도 된 것인지는 알 수 없지만, "%"인수 대신 DDE 메시지를 작성하여 DDE (Dynamic Data Exchange Protocol)를 사용하여 "동일한"인스턴스에서 강제로 열 수 있습니다. 1 "은 파일을 실행할 때 열리는 해당 인스턴스의 파일을 가리 킵니다. (단, DDE는 어려운 논증에도 사용됩니다).

이 경우 DDE 메시지는 프로그램에게 파일을 열도록 지시하는 데 사용됩니다. 모든 파일이 실행될 때마다 매번 새로운 인스턴스가 생성됩니다. 그러나 DDE 프로토콜을 사용하는 경우 먼저 인스턴스가 이미 작성되어 있는지 확인하고, 발견 된 경우 발견 된 첫 번째 인스턴스에 DDE 메시지를 중계하고 종료하므로 모든 파일이 즉시 단일 인스턴스에서 열리라는 착각을줍니다.

투기

다중 인스턴스에서 파일을 여는 문제는 다른 인스턴스가 호출 될 때 단일 인스턴스가 이미로드 한 양과 관련이있을 수 있습니다. 첫 번째와 두 번째 인스턴스의 실행 시간 차이 사이의 추세는 실행 사이의 시간이 증가함에 따라 단일 인스턴스를 생성하는 경향이 있고 감소함에 따라 두 개의 인스턴스를 생성하는 경향이 있습니다. 즉, 다른 파일이 실행 된 경우 동일한 인스턴스에서 새 파일을 열려면 첫 번째 인스턴스를로드하거나 "준비"해야하며 그렇지 않은 경우 파일을 자체적으로 열어야합니다.

파일 경로가 프로그램의 인수로 사용될 때이 추세를 따르는 것 같습니다.

  • 단어 2016
  • 엑셀 2016

첫 번째 인스턴스가 준비된 경우 (또는 첫 번째가 아닌 것이 준비된 경우) 첫 번째 인스턴스가 아닌 경우 인스턴스를 첫 번째 인스턴스에 DDE 메시지로 릴레이 할 수있는 것으로 보입니다.

그러나 프로그램을 실행하고 DDE 메시지를 사용하여 파일을 열면 첫 번째 인스턴스가 인수를 통해 DDE 메시지를 수락 할 준비가되었는지 여부에 관계없이 DDE 프로토콜을 따르는 것 같습니다. 첫 번째 인스턴스가 준비되었는지 여부는 첫 번째 인스턴스가 아닌 것이 첫 번째 인스턴스가 준비된 것으로 인식하는지 여부와 첫 번째 인스턴스에 DDE 메시지를 보내지 않으면 인수를 통해 열 때만 발생하는 것으로 보입니다. . 첫 번째가 "준비되지 않은"또는 "존재하지 않은"것으로 첫 번째가 아닌 것으로 보는 추측은 다음과 같은 경우 첫 번째에 의해 DDE 메시지 (첫 번째가 아닌)가 첫 번째로 수락된다는 사실에 의해 제안됩니다. 인수 연결 "% 1"; DDE 메시지를 통해 열도록 지시됩니다.

내 추측은 :이 응용 프로그램의 코드는 다른 인스턴스가 "준비"되었는지 여부를 결정하기 위해 모호한 방법을 사용하며, 그렇다면 인수가 사용될 때 DDE 프로토콜을 사용합니다. 이것은 다른 인스턴스로 전송할지 여부를 결정하기 위해 DDE 프로토콜을 수신 할 때와 다른 방법을 사용하는 것 같습니다. 의사 코드는 실제로 다음과 같이 나타납니다.

if(argrument.wasUsed()){
    // Office's obscure condition
    if(Office.thinksInstanceIsReady(anotherInstance)){
        // Use DDE Protocol
        if(anotherInstance.exists()){ // already knew that
            sendDDEmessage(anotherInstance);
            exitThisInstance();
        }
    } else {
        selfFollowDDEmessage(); // Leave open this instance
    }
if(givenDDEMessage()){
    // Use DDE Protocol
    if(anotherInstance.exists()){
        sendDDEmessage(anotherInstance);
        exitThisInstance();
    } else {
        selfFollowDDEmessage();
    }
}

프로그래머에게 알려주지 않고 버그인지 또는 이유가 불분명 한 것인지를 알 수있는 방법이 없습니다.

결의

더 이상 인수로 실행되는 파일의 파일 경로 ( "% 1")를 보내지 않고 실행중인 프로그램에 DDE 메시지의 내용을 전달하도록 특정 파일 확장자의 실행을 조정하려고합니다. 파일을 여는 요청이 포함되어 있습니다.이 요청은 파일이 존재하고 사용하지 않는 경우 이미 존재하는 인스턴스로 파일을 릴레이합니다. 파일 경로에 대한 인수가 사용되는 경우 다른 인스턴스가 "준비"된 것으로 보이기 위해 이러한 응용 프로그램의 모호한 요구 사항을 무시할 수 있습니다.

이것들은 Class 키와 관련된 모든 파일 확장자로 x다음 과 같이 대체됩니다 :

단어

FILEEXT          CLASS NAME (x)
 .doc*           Word.Document.8
 .docm†    Word.DocumentMacroEnabled.12
 .docx*         Word.Document.12
 .dot            Word.Template.8
 .dotm†    Word.TemplateMacroEnabled.12
 .dotx†         Word.Template.12
 .odt        Word.OpenDocumentText.12
 .rtf†             Word.RTF.8
 .wbk             Word.Backup.8
 .wiz             Word.Wizard.8
 .wll             Word.Addin.8

엑셀

FILEEXT             CLASS NAME (x)
 .csv*                Excel.CSV
 .ods       Excel.OpenDocumentSpreadsheet.12
 .slk                 Excel.SLK
 .xla                Excel.Addin
 .xlam†        Excel.AddInMacroEnabled
 .xld                Excel.Dialog
 .xlk                Excel.Backup
 .xll                 Excel.XLL
 .xlm              Excel.Macrosheet
 .xls*              Excel.Sheet.8
 .xlsb†     Excel.SheetBinaryMacroEnabled.12
 .xlshtml           Excelhtmlfile
 .xlsm†       Excel.SheetMacroEnabled.12
 .xlsx*             Excel.Sheet.12
 .xlt†             Excel.Template.8
 .xlthtml          Excelhtmltemplate
 .xltm†        Excel.TemplateMacroEnabled
 .xltx†             Excel.Template
 .xlw               Excel.Workspace
 .xlxml               Excelxmlss

* 최소한으로 수행해야하는 가장 중요하고 일반적인 파일 확장자. 주걱.

† 최소한으로 수행해야하는 보조 가장 중요하고 일반적인 파일 확장자. 주걱.

이 목록은 명령 줄을 통해 복제 할 수 있습니다 . 공식 단축 이름 (대소 문자 구분)으로 assoc | findstr Word바꿉니다 Word.

필요하다고 생각되면 모두 할 수있는 옵션이 있습니다. 더 많은 것을 원한다면 내가 제공해야 할 옵션 단계를 따르고 싶을 때 필요한 작업을 줄일 수 있습니다.

아래의 모든 레지스트리 키에 대해 다음 지침을 x따라 해당 클래스를 선택한 해당 클래스로 교체 해야합니다.

  • HKEY_CLASSES_ROOT\x\shell\Open
  • HKEY_CLASSES_ROOT\x\shell\OpenAsReadOnly

(예 : HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open)

다시 한 번, OpenAsReadOnly키는 옵션으로 파일을 실행할 때 읽기 전용이되도록 준비됩니다.

작은 예방책-백업

수정하기 전에 레지스트리 값을 가장 잘 기억하려면 키 분기를 마우스 오른쪽 단추로 클릭 HKEY_CLASSES_ROOT하고 상황에 맞는 메뉴에서 "내보내기"를 클릭하고 등록 파일을 위치에 저장하십시오. Doc Brown이 "우리는 되돌아 가야한다"고 말하면 레지스트리 키를 실행하고 지시에 따라 가져올 수 있습니다.

또는 다음 command을 사용하여 작은 실수를 수정 한 값과 클래스 이름 을 기억할 수도 있습니다 .

assoc>>fileexts.txt 사용하여 필터링 할 수 있습니다 type fileexts.txt | findstr Word

ftype>>classnames.txt 사용하여 필터링 할 수 있습니다 type classnames.txt | findstr Word

명령

원하는대로 위에 나열된 모든 키 값에 대해이를 준수해야합니다.

선호하는 레지스트리 편집기에 입력하거나 regedit수정하려는 클래스로 이동하십시오.

이라는 키를 입력 command하고 (Default)값을 마우스 오른쪽 버튼으로 클릭 한 다음 상황에 맞는 메뉴에서 "수정"을 클릭하십시오.

현재 설정되어 있어야합니다 ftype | findstr Word

공백을 포함 하여 값 끝에서 직접 인수를 제거하도록 변경하십시오 .

  • "C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE"
    (Excel 64 비트의 경우)
  • "C:\Program Files\Microsoft Office\Root\Office16\WINWORD.EXE"
    (Word 64 비트의 경우)
  • "C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE"
    (Word 32 비트 용)
  • "C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE"
    (Excel 32 비트의 경우)

ddeexec옆에있는 command키 ( 존재하지 않는 경우 키 생성)를 입력하고 (Default)값을 마우스 오른쪽 단추로 클릭 한 다음 컨텍스트 메뉴에서 "수정"을 클릭하고 값을 다음과 같이 설정하십시오.

  • [REM _DDE_Direct][FileOpen("%1")] -(단어)
  • [open("%1")] -(Excel의 경우)

아래에 ddeexec이름 topic이없는 새 키를 작성 하고 (Default)값을 마우스 오른쪽 단추로 클릭 한 다음 상황에 맞는 메뉴에서 "수정"을 클릭하고 값을 system(아직 그렇지 않은 경우)로 설정하십시오.

수정 후 레지스트리에 이러한 변경 사항을 만든 후 관리자 권한 명령 프롬프트 또는 셸을 사용하여 shell32.dll을 새로 고쳐야 할 수도 있습니다.

regsvr32 /i shell32.dll

이것은 Windows 10 Office 2016 버전 16.0.8625.2127에서 테스트되었습니다.

대체 단축키

파일 확장명 (예 :)의 키로 이동 HKEY_CLASSES_ROOT\.xlsx하여 "(기본값)"값을 단일 클래스로 수정할 수 있습니다.이 접근 방식을 따르는 경우 여러 파일 확장명을 동일한 클래스 값 (예 :)으로 Excel.Sheet.12지정할 수 있습니다. DDE 메시지로 해당 클래스를 한 번만 수정하면됩니다. 이 작업을 수행하면 해당 레지스트리 분기 내에서 클래스 이름의 모든 반복 이름도 변경해야합니다. 그러나이 방법은 쉽게 중단 될 수 있으므로 시간을 절약하기 위해 모든 파일 확장자를 수행해야하는 경우 권장되지 않습니다.

각주 :

/o인수는 URL에 대한 인수이므로이 기능이 거의 전달되지 않으므로이 기능을 잃어 버릴 염려가 없습니다. 그러나 원하는 경우 (Default)값을 조정할 때 인수의이 부분을 그대로 둘 수 있습니다 .

나는 이것을 추측 력이 있고 완성되지 않았기 때문에 이것을 커뮤니티 위키로 만들고 싶습니다 (Word & Excel이 유일한 것이 아니라면). 이에 대한 의견을 적어주십시오.


1

@ El8tedN8te의 탁월한 답변 외에도 Excel의 경우 ddeexec레지스트리 키 를 수정할 필요가 없음을 언급합니다 .

(Default)항목 의 값을 다음과 같이 설정하면 충분 합니다.

"C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /dde "%1"

내 테스트에 따르면 Excel 인스턴스는 하나만 실행됩니다.


광산 에서이 방법은 아무 소용이 없었습니다. 단일 인스턴스에서는 실행되지 않았습니다. 나는 자신을 잘못 증명하기 위해 열심히 노력했다. 다시 시작하고 올바른 클래스 이름과 확장명을 사용하고 있는지 확인하고 인수를 뒤집어 놓고 "C2R".exe를 종료했습니다. : 사실 그들은 여분의 인수가 그들을 여기 인정되는 별도의 인스턴스를 유지했고, 동시에 열려 있지 않은 경우에도 반대했다 social.technet.microsoft.com/Forums/office/en-US/...
El8dN8

@ El8tedN8te : 두 컴퓨터의 차이점이 무엇인지 모르겠습니다. 파일> 옵션> 고급 메뉴의 일반에서 "DDE (Dynamic Data Exchange)를 사용하는 다른 응용 프로그램 무시"옵션을 사용하십시오. 귀하의 링크 /dde는 단일 인스턴스를 강제해야 함을 확인 합니다.
harrymc

그 링크를 읽을 때 내가 참담한 지 모르겠다 ... ha ... ha ... 네, 그 설정을 확인했습니다 ... 왜 내 행동이 다른지 살펴볼 가치가 있습니다. 내 PC가 틀렸다면 내 추측은 틀리다. 사무실 버전을 물어봐도 될까요?
El8dN8

@ El8tedN8te : 버전 16.0.8625.2121.
harrymc

내 컴퓨터에서 @ El8tedN8te와 마찬가지로 작동하지 않습니다.
랜드 무작위

-1

에서 페이지 "고보고 Excel에서 더 MDI 호환성 옵션이 없습니다. "

"MDI"는 Multiple Document Interface의 약자이며 SDI (Single Document Interface)로 대체되었으므로 버그가 없습니다. 이것이 Excel이 작동하는 방식입니다.

당신이 할 수있는 일은 누르면 통합 문서를 통해 사이클 Ctrl+TABCtrl+Shift+TAB사이클 뒤쪽에. 원하는 경우이 기능을 전체 Office 제품군에 추가하는 응용 프로그램을 설치할 수 있습니다. 이 두 가지 옵션을 확인하십시오.

불행히도 지금은 이러한 소프트웨어를 테스트 할 수 없습니다.


제공 한 링크에서도 두 개의 Excel 워크 시트를 하나씩 열 때 "프로세스 탭에서 Excel.exe가 표시 될 때까지 아래로 스크롤합니다. 두 번의 Excel을 열었음에도 불구하고 두 개의 통합 문서가 동일한 단일 Excel 인스턴스 에 포함되어 있습니다. " 방법 영업 이익은 (마이크로 소프트와 동일한 방법으로) 두 개의 인스턴스를 생성 모순 다중 문서 인터페이스 (인스턴스)이 아닌 내에서 나타나는 때문에 "Excel에서 더 MDI 호환성 옵션이 없습니다"라는 문장 같은 이 있어야하는데 인스턴스를.
El8dN8

@ El8tedN8te가 지적했듯이 2 개의 창이 아닌 2 개의 인스턴스 (2 개의 프로세스)에 대해 이야기하고 있습니다.
랜드 무작위

이전 의견을 수정하고 싶습니다. 제공된 견적이 실제로 정확합니다. 마지막 문장 전체를 무시하십시오 ... 나는 뻔뻔했다.
El8dN8

괜찮습니다, @ El8tedN8te. 나는 따옴표에서 무엇이 잘못된 것인지 궁금 해서요
m2cit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.