Udostępnij za pośrednictwem


Okno dialogowe Zapisz jako jest wyświetlane za aplikacją, która drukuje do Sterownika dokumentów XPS.

Artykuł ten pomaga rozwiązać problem, w którym okno dialogowe Zapisz jako jest ukryte za aplikacją, która wysyła polecenie drukowania za pomocą drukarki XPS Document Writer, co powoduje, że aplikacja przestaje odpowiadać.

Oryginalna wersja produktu: XPS Document Writer
Oryginalny numer KB: 2567869

Objawy

Rozważmy następujący scenariusz:

  • Uruchamiasz aplikację 32-bitową w 64-bitowej wersji systemu Windows 7.
  • Drukujesz z aplikacji na drukarkę Microsoft XPS Document Writer (MXDW). W tym scenariuszu okno dialogowe Zapisz jako jest wyświetlane za aplikacją.

Ponadto mogą wystąpić następujące objawy:

  • Aplikacja wydaje się przestać odpowiadać (zawieszać się), dopóki nie wprowadzisz nazwy pliku lub anulujesz zadanie drukowania.
  • Aplikacja, która drukuje, nie staje się pierwszą aplikacją (aktywną), gdy okno dialogowe Zapisz jako zostanie zamknięte.

Uwaga / Notatka

Ten problem może wystąpić również podczas drukowania na innej drukarce, której sterownik wyświetla okno dialogowe Zapisz jako lub inne modalne okno dialogowe. Sterownik drukarki dla drukarki Adobe PDF jest tego typu sterownikiem.

Przyczyna

Sterowniki drukarek są implementowane jako biblioteki linków dynamicznych (DLL), które są ładowane do procesu drukowania. Sterowniki drukarek są implementowane jako 64-bitowe biblioteki DLL w 64-bitowych wersjach systemu Windows i jako 32-bitowe biblioteki DLL w 32-bitowych wersjach systemu Windows.

Proces 32-bitowy nie może załadować 64-bitowych bibliotek DLL. W związku z tym 64-bitowe wersje systemu Windows obsługują drukowanie z procesów 32-bitowych za pośrednictwem procesu Splwow64.exe. Splwow64.exe jest procesem 64-bitowym, który może ładować 64-bitowe sterowniki drukarek i obsługuje drukowanie dla procesów 32-bitowych.

Gdy aplikacja wywołuje StartDoc funkcję do drukowania na drukarce zapisywania dokumentów XPS, sterownik drukarki zapisywania dokumentów XPS wyświetla okno dialogowe Zapisz jako , aby użytkownicy mogli określić nazwę i lokalizację pliku XPS. Okno właściciela okna dialogowego jest zazwyczaj aktywnym oknem wątku wywołującym StartDoc funkcję, a okno dialogowe zostanie wyświetlone w aktywnym oknie.

Gdy aplikacja 32-bitowa wywołuje funkcję StartDoc w 64-bitowej wersji systemu Windows, proces Splwow64.exe kieruje polecenia do sterownika drukarki XPS Document Writer dla aplikacji 32-bitowych. W tym scenariuszu okno dialogowe Zapisz jako nie jest własnością, ponieważ wątek w procesie Splwow64.exe nie ma aktywnego okna. Okno dialogowe może pojawić się za aplikacją drukowaną, ponieważ proces Splwow64.exe nie ma uprawnień do ustawiania okna pierwszego planu. Ponadto, ponieważ okno dialogowe jest nieprzypisane, aplikacja, która wywołała funkcję StartDoc, może nie stać się aplikacją pierwszego planu po zamknięciu okna dialogowego.

Wywołanie StartDoc nie zwraca się, dopóki okno dialogowe nie zostanie odrzucone, więc aplikacja może wydawać się przestać odpowiadać.

Okno dialogowe Zapisz jako ma własny przycisk na pasku zadań Eksploratora Windows, jeśli jest on tworzony przez proces Splwow64.exe. Jest to dlatego, że okno dialogowe jest nieposiadające właściciela. Przycisk paska zadań również błyska, gdy proces Splwow64.exe nie może ustawić okna na pierwszym planie.

Rozwiązanie

Aby obejść ten problem, możesz uzyskać dostęp do okna dialogowego Zapisz jako za pomocą przycisku paska zadań. Możesz też nacisnąć Alt+Tab, aby przełączyć fokus na okno dialogowe.

Więcej informacji

Deweloperzy oprogramowania mogą uniknąć tego problemu w swoich 32-bitowych aplikacjach, wykrywając, kiedy użytkownik drukuje na drukarce XPS Document Writer lub na drukarce Adobe PDF. Następnie aplikacja określa pełną ścieżkę do pliku w członku struktury DOCINFO.lpszOutput podczas wywoływania funkcji StartDoc. Sterownik drukarki użyje określonego pliku zamiast monitowania użytkownika o plik.

Zastrzeżenie dotyczące informacji pochodzących od stron trzecich

Produkty innych firm omówione w tym artykule są produkowane przez firmy, które są niezależne od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.