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

У меня есть 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\shell\print\ содержит значение по умолчанию типа 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 ответ

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

Другие вопросы по тегам