Глагол печати ShellExecute не может печататься из 32-битного приложения в 64-битных окнах - PullRequest
1 голос
/ 20 марта 2012

У меня есть 32-битная программа, установленная клиентом в 64-битных окнах.

Кажется, есть проблема с использованием ShellExecute и глагола печати в этой конфигурации. Сначала моя тестовая программа.

// printme.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "objbase.h"
#include <windows.h>

#include <shellapi.h>

int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        printf("Usage: %s file_to_print", argv[0]);
        return 0;
    }

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) ; //| COINIT_DISABLE_OLE1DDE);

    HINSTANCE retVal = ::ShellExecute(NULL, "print", argv[1], NULL, NULL, 0);   // don't ask, as the user can always cancel...
    printf("RetVal = %08x\n", retVal);
    printf("LastError = %08x\n", GetLastError());
    return 0;
}

Эта программа корректно работает в 32-битной версии Windows до Windows 7. Программа просто запускает команду печати для первого аргумента, переданного в командной строке.

printme Page1.htm

В рассматриваемой системе реестр настроен следующим образом:

HKEY_CLASSES_ROOT \ HTMLFILE \ оболочки \ печать \ команды содержит значение по умолчанию типа REG_EXPAND_SZ, содержащее rundll32.exe% windir% \ system32 \ mshtml.dll, PrintHTML "% 1"

Если я запускаю следующую команду rundll32 c: \ windows \ system32 \ mshtml.dll, PrintHTML «Page1.htm» диалоговое окно печати успешно отображается.

Тем не менее запущенная моя программа мигает, но диалоговое окно печати никогда не появляется, и остановленная копия C: \ Windows \ sysWow64 \ rundll32.exe находится в диспетчере процессов, который никогда не завершается.

Есть ли обходной путь или ShellExecute навсегда поврежден для общих глаголов в общих типах файлов из 32-разрядных программ в 64-разрядных окнах?

1 Ответ

0 голосов
/ 22 марта 2012

Оказывается, проблема в последнем параметре ShellExecute. Хотя 0 работал годами, теперь он требует, чтобы SW_SHOW работал правильно для глагола печати в этом случае. Возможно, недавнее обновление Windows изменило поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...