当我在标准用户帐户中运行我的程序时,我在调用 Winspool.drv "OpenPrinter" 时遇到问题。但是当我在管理员帐户中运行我的程序时。它可以正确执行 API 调用。
我正在尝试使用此 API 调用 OpenPrinter
[DllImport("WinSpool.drv", SetLastError = true)]
static extern unsafe bool OpenPrinter (string pPrinterName, int* phPrinter, void* pDefault);
并使用此代码实现它
static unsafe int CSOpenPrinter(string printerName)
{
bool bResult;
int hPrinter;
PRINTER_DEFAULTS pd = new PRINTER_DEFAULTS();
//int rawsize = Marshal.SizeOf(pd);
//IntPtr pdPtr = Marshal.AllocHGlobal(rawsize);
//pd.pDatatype = null;
//pd.pDevMode = null;
pd.DesiredAccess = PRINTER_ALL_ACCESS;
bResult = OpenPrinter(printerName, &hPrinter, &pd);
System.Diagnostics.Debug.WriteLine("bResult: " + bResult);
if (!bResult)
{
throw new ApplicationException("Cannot open printer '" +
printerName + "' " +
Marshal.GetLastWin32Error());
}
return hPrinter;
}
好的,当我尝试使我的程序“以管理员身份运行”时,该代码可以完美运行。如何在不右键单击应用程序并选择“以管理员身份运行”的情况下使我的应用程序以管理员身份运行?
我相信这是一个 UAC 问题,但你能给我一个如何解决这个问题的想法吗?添加 app.manifest 会有帮助吗?你能给我一个例子吗?
最好的