プリンタードライバーをインストールし、そのドライバーを使用してプリンターを作成する実行可能ファイルがあります。サーバー2003リソースキットからtlbimpで生成された管理バージョンのprnadminを使用します。
Windows XPでは、プリントプロセッサをMS_XPSに設定する必要があります。デフォルトのプロセッサはWINPRINTです。このスニペットはそれを行うものです。
static string winxpPrinterProcessor = "MS_XPS";
if (isWinXP() && pPrinter.PrintProcessor != winxpPrinterProcessor)
{
Console.WriteLine("Oh No, the printer exists, but the processor isn't XPS. Setting now. It's currently " + pPrinter.PrintProcessor);
pPrinter.PrintProcessor = winxpPrinterProcessor;
Console.WriteLine("Set the processor to " + winxpPrinterProcessor);
if (updateOnly)
{
pMaster.PrinterSet(pPrinter);
} else { //else we're adding
pMaster.PrinterAdd(pPrinter);
}
プログラムを自分で実行する場合、ダブルクリックすると完全に機能します。MSIカスタムアクションとして実行すると、機能しません。すべてが機能します(プリンター、ドライバーのインストール、ポートの設定)が、プリントプロセッサーの設定です。Windowsはプロセッサ設定を無視します。
MSIは、SYSTEMユーザーとしてカスタムアクション(コンソールアプリ)プロセスを起動します。手動で起動すると、ドメイン管理者アカウントで実行されます。
また、xpはINFファイルからプロセッサを取得するため、プリンタを手動でインストールしても問題なく動作することにも注意してください。prnadmin dllを使用する場合、その設定は無視されます。
とてもイライラする朝を過ごしました。何かご意見は?または、プリンタをインストールするためのより良い方法はありますか?