2012-05-30 1 views
0

표준 사용자 계정으로 프로그램을 실행할 때 Winspool.drv "OpenPrinter"를 호출하는 데 문제가 있습니다. 하지만 관리자 계정으로 프로그램을 실행했을 때. API 호출을 올바르게 실행할 수 있습니다. 내 프로그램 "실행을하려고 할 때C# Winspool.drv "프린터를 열 수 없습니다."

는 그 코드가 완벽하게 작동,이 API

[DllImport("WinSpool.drv", SetLastError = true)] 
static extern unsafe bool OpenPrinter (string pPrinterName, int* phPrinter, void* pDefault); 

를 사용을 OpenPrinter 호출을 시도하고 다시

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를 추가하면 도움이 될까요? 나 한테 시험보고 줄 수있어?

최대 모두

+1

실제로'PRINTER_ALL_ACCESS'가 필요합니까? 방금 인쇄하고 싶다면'PRINTER_ACCESS_USE'를 사용하십시오. – arx

+0

클라이언트가 원할 때 프린터를 사용할 수 없습니다. 왜 PRINTER_ACCESS_USE가 작동하지 않는 지 모르겠습니다. 이것은 PRINTER_ACCESS_USE의 올바른 값입니까? PRINTER_ACCESS_USE = 0x00008 - 작동하지 않습니다. –

+1

값이 정확합니다. 프린터를 사용하지 않으려면'PRINTER_ALL_ACCESS'가 필요하고 매니페스트를 추가해야합니다 : http://msdn.microsoft.com/en-us/library/bb756929.aspx – arx

답변

0

프린터로 무엇을하려고합니까? 귀하의 코드가 전체 액세스 권한을 요구하고 있으므로 관리자 권한이 필요합니다.

프린터를 사용하려는 경우 대신 PRINTER_ACCESS_USE 액세스를 요청하십시오.

실제로 관리 프로세스 인 경우 실행 파일에 add an appropriate manifest을 입력하면 관리 액세스가 필요한 것으로 알립니다.

+0

클라이언트가 원하는대로 프린터를 사용할 수 없습니다. 왜 PRINTER_ACCESS_USE가 작동하지 않는 지 모르겠습니다. 이것은 PRINTER_ACCESS_USE의 올바른 값입니까? PRINTER_ACCESS_USE = 0x00008 - 작동하지 않습니다. –

+1

@JaysonRagasa : PRINTER_ACCESS_USE로 프린터 설정을 변경할 수 없습니다. 디아나 (Deanna)는 PRINTER_ALL_ACCESS와 EXE 용 매니페스트를 사용하여 Windows에 상승 된 권한이 필요하다고 말합니다. –

0

프로젝트에 매니페스트 파일을 추가하십시오. 마찬가지로 here