我有一个32位程序,由客户在64位窗口上安装。ShellExecute打印动词无法从64位窗口上的32位应用程序打印
在该配置中使用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 \壳\打印\命令 包含含有 RUNDLL32类型REG_EXPAND_SZ的默认值.EXE%WINDIR%\ SYSTEM32 \ Mshtml.dll的,PrintHTML “%1”
如果我运行下面的命令 RUNDLL32 C:\ WINDOWS \ SYSTEM32 \ Mshtml.dll的,PrintHTML“Page1.htm” 打印对话框已成功显示。
但是,运行我的程序闪烁,但从不出现打印对话框,并且C:\ Windows \ sysWow64 \ rundll32.exe中的一个停止副本为 ,它在进程管理器中,从未完成。
是否有解决方法,或者ShellExecute是否永久损坏了64位窗口上32位程序的常见文件类型的常见动词?
如果我从开始菜单中的运行提示符运行该命令,我得到卡住的进程。如果我从*提升的* cmd窗口运行该命令,该过程不会卡住,但我没有看到任何UI。我使用64位Windows 7.我怀疑你有一个UAC问题。 – 2012-03-20 17:11:06
@AdrianMcCarthy哪个命令? RUNDLL32?或者printme的编译版本? HTML文件是否存在? – 2012-03-20 17:24:07