我有一個安裝打印機驅動程序的可執行文件,然後使用該驅動程序創建打印機。我使用服務器2003資源工具包中的tlbimp生成的prnadmin託管版本。當以SYSTEM身份運行時,prnadminlib無法在winxp上設置處理器,在域用戶時工作
在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時會忽略該設置。
我已經有一個非常沮喪的早晨。有什麼想法嗎?或更好的方式來安裝打印機?
我在計算出PrintUI.dll是否可以使用,在這方面的任何提示將不勝感激。由於這個怪癖,「受管理」代碼版本無法使用真的讓人感到不安。 – scaryman