0

API 呼び出しを介して HTML ページを取得し、SHDocVw.InternetExplorer & ExecWB を使用してドキュメントを印刷する C# コンソール アプリケーションがあります。アプリケーションを直接実行すると (ダブルクリック)、すべてが期待どおりに実行されます。しかし、Windows サービスからアプリケーションを実行すると、コンソール アプリケーションがハングし、プリンターが応答するのを待ちます。

私は管理者としてサービスを実行しており、タスク マネージャーから収集した情報から、コンソール アプリケーションも管理者として実行しています。プリンター名が有効であることのチェックを含め、すべてが合格したため、アプリケーションがプリンターにアクセスできるようです。IE のインスタンスは問題なくドキュメントをロードするため、プリンターに送信するコンテンツがあります。OLECMDEXECOPT_DONTPROMPTUSER を OLECMDEXECOPT_PROMPTUSER に切り替えると、直接実行すると期待どおりの結果が得られますが、サービスを介して実行すると何も得られません。

サービス内:

        public void RunProgram(string exePath)
        {
            Process p = new Process();
            p.StartInfo = new ProcessStartInfo(exePath);
            p.Start();
            p.WaitForExit();
        }

印刷機能では:

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

ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
    while (!documentPrinted)
    {
        PrintToErrorFile("waiting for printing to complete...");
        Thread.Sleep(100);
    }

直接実行すると、印刷関数は予想どおり「待機中...」の6行程度を出力します。サービスから実行すると、プログラムは期待どおりに実行され (API 呼び出しとすべて)、待機中のメッセージが無限に繰り返されます。

4

1 に答える 1