64ビットウィンドウに顧客がインストールした32ビットプログラムがあります。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;
}
このプログラムでは、プログラムは単にコマンドラインに渡される最初の引数に印刷動詞を実行するWindows 7の32ビットWindowsのバージョンアップで正常に動作します。
プリントミー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の停止したコピーがプロセスマネージャにあります。
回避策はありますか、または64ビットウィンドウ上の32ビットプログラムからの共通ファイルタイプの共通動詞に対してShellExecuteが永久に壊れていますか?
[スタート]メニューの[実行]プロンプトからこのコマンドを実行すると、スタックプロセスが発生します。 * elevated * cmdウィンドウからコマンドを実行すると、プロセスが停止することはありませんが、UIは表示されません。私は64ビットのWindows 7を使用しています.UACの問題があると思われます。 –
@AdrianMcCarthyどのコマンドですか? rundll32?またはコンパイルされたバージョンのprintme? htmlファイルは存在しましたか? –