0

IIS マシンにデプロイされた WCF サービスを介してサーバー側からファイルを印刷しようとしています。次のコードは、Win 2oo3 マシンで完全に機能します。しかし、同じコードが COM 例外をスローしています。これについてのアイデア。いくつかの権限に関連していると思います。ここにコードがあります

public void Print(string htmlFilename, string printer, short copies)
        {
            string currDefault = string.Empty;
            try
            {
                currDefault = GetDefaultPrinter();
                myPrinters.SetDefaultPrinter(printer);
                for (int i = 0; i < copies; i++)
                {
                    documentLoaded = false;
                    documentPrinted = false;

InternetExplorer  ie = new InternetExplorer  ();
                    ie.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
                    ie.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);
                    object missing = Missing.Value;

                    ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
                    while (!documentLoaded && ie.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_PRINT) != SHDocVw.OLECMDF.OLECMDF_ENABLED)
                        Thread.Sleep(100);


                    ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINTPREVIEW, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref missing, ref missing);

                    ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
                    while (!documentPrinted)
                        Thread.Sleep(100);

                    ie.DocumentComplete -= ie_DocumentComplete;
                    ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
                    ie.Quit();
                }
            }
            catch { throw; }
            finally
            {
                myPrinters.SetDefaultPrinter(currDefault);
            }
        }

そして、Com Exception は、internetexplorer のオブジェクトを作成しているときに正確に次のようになります。

[エラー ログ] CLSID {0002DF01-0000-0000-C000-000000000046} を持つコンポーネントの COM クラス ファクトリの取得に失敗しました。: System.RuntimeTypeHandle.CreateInstance(RuntimeType タイプ、Boolean publicOnly、Boolean noCheck、Boolean& canBeCached、RuntimeMethodHandleInternal& ctor、Boolean& bNeedSecurityCheck) で System.RuntimeType.CreateInstanceSlow(Boolean publicOnly、Boolean skipCheckThis、Boolean fillCache) で System.RuntimeType.CreateInstanceDefaultCtor(Boolean) publicOnly、Boolean skipVisibilityChecks、Boolean skipCheckThis、Boolean fillCache) の System.Activator.CreateInstance(Type タイプ、Boolean nonPublic) at System.Activator.CreateInstance(Type タイプ) [/ERRORLOG]

さらに、InternetExplorerMedium としてオブジェクトを作成しようとすると。その後、2008年には機能しましたが、Winサーバー2003では機能しませんでした。

よろしく、パバンN

4

2 に答える 2

1

2003 サーバーと 2008 サーバーにインストールされている IE のバージョンを確認します。また、IE のバージョンごとに IE のインストールが異なるため、2008 ボックスには含まれていない他の IE バージョン関連の SDK ランタイムなどをインストールする必要がある場合もあります。たとえば、DHTMLEdit ActiveX ツールキットをインストールする必要がある古いクライアント アプリがあります。これには別の手順が必要であり、MSDN でセットアップ ルーチンを探す必要があります。また、2003 サーバーと 2008 サーバーの間のアカウントとアクセス許可 (WCF サービスの実行に使用されるアカウント) を確認し、何が違うのかを確認してください。2008 年には、多くのセキュリティ設定が強化された可能性があります。

于 2012-11-03T03:52:17.180 に答える
0

最後に、自分のロジック自体を変更しました。IEとの違いがたくさんありました。特にIE9。すべての DCOM 設定が異なります。そのため、名前は InternetExplorer ie = new InternetExplorer (); です。オブジェクトを作成することはできません。権限やOSとは関係ありません。IEのバージョンに関連しています。上記のコードは IE8 までしか機能しません。

于 2012-12-04T15:21:19.517 に答える