3

デルファイでwin32サービスを開発しました。 7いくつかの印刷操作を実行しました。私たちのXPマシンではすべて正常に動作しますが、ターゲットで失敗しますWindows 2008標準サーバ。 printステートメントの周りにtry exceptブロックを置くと、"Printer Selected is not valid"というエラーメッセージが表示されます。エラー。Delphi Win32 Service 2008 64bit標準サーバで「Printer Selected is not valid」エラーが発生しました

Printerオブジェクトをチェックしてプリンタとイベントの数を調べると、Printerオブジェクトで使用可能なすべてのプリンタがファイルに書き出されますが、正常に動作します。印刷を実行しようとするとき(プリンタのローカルとネットワーク上で)は、失敗します。

googleを使用した研究の多くに基づいて、ローカルのacct、ネットワークacct、特定のacct、LogonAsUser、ImpersonateUser、LoadUserProfileなどを使用するためのいくつかの提案が見つかりましたが、何も動作していません。私はまた、インストールされたプリンタのセキュリティを誰もが利用できるように設定しました。

このことは本当に私を夢中にしています。どんな助けも大変に感謝しています。

ありがとうございます。

答えて

4

これは、Vistaで導入されたセッション0アイソレーションが原因と考えられます。サービスは常にセッション0で実行されますが、XP以前では、ログインする最初のユーザーもセッション0で実行されるため、サービスはそのユーザーのデスクトップにアクセスできます(したがって、「対話型」サービス)とリソース(共有やプリンタなど) 。 Vista以降では、ユーザーはセッション0でこれ以上実行されないため、サービスはユーザー固有のリソースにはもうアクセスできません。サービスは、アクセスしたいユーザーアカウントを偽装する必要があります。

+0

感謝しています。 LogonAsUser、ImpersonateUser、LoadUserProfileのwinapi呼び出しを試してみました。すべて成功し、ユーザートークンも取得します。しかし、それでも印刷操作は失敗します。 – rohan

+0

GetLastError()が失敗した理由を報告しているかどうかチェックしましたか? –

2

「それはうまくいかない」という質問に常に答えにくいです。しかし、私は推測することができます。マイクロソフトは過去のサービスからの印刷について警告している。私は問題は、プリンタドライバは、Windows 2008が提供する種類のサービス環境で動作することはめったにないということです。サービスは独立したセッションで実行されるため、デスクトップと対話できなくなります。プリンタドライバは、紙詰まりがあることをユーザーに促すようなものをやりすぎてしまう傾向があります。あるいは、工場で承認された新しいトナーカートリッジを購入する時期です。それはセッション0でうまくいきません、誰もそれが叫んで聞こえることはありません。非常に診断不能で、あなたはなぜサービスが押収されたのかを知ることはできません。

おそらく、彼らは2008年にこれを釘付けにして完全にブロックしました。いいえアイデアは、あなたが、私はエラーの同じ種類を取得serverfault.com

0

でこれを知っている人を見つけることができます、多くのGoogleの作業は行われませんAN http://www.codenewsfast.com/cnf/article//permalink.art-ng1612q9464

に来たことは、Delphi 2007、プリンタ部と思われる:プリンタ.pasはVista以上のために設計されていません。 参照先の項目には、Printer.pasのソースを変更するオプションがあります。 眺めで私の問題を解決しました。

関連する問題