Проблема при вызове AddPrinterDriver - winspool.drv - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь создать виртуальный принтер, используя c # с некоторой функцией привязки из winspool.drv, я успешно установил принтер в свои windows 7 64bit, но win32 всегда вызывает код ошибки 216 всякий раз, когда я пытаюсь установить на 32bit машина.

Я решил позаимствовать компьютер моих друзей, в котором на 10 компьютерах с 32-битным процессором есть только один, чтобы установить драйвер принтера.

Ошибка происходит, когда я вызываю метод AddPrinterDriver. А вот и мой код:

[DllImport("winspool.drv", EntryPoint = "AddPrinterDriver", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool AddPrinterDriver(String pName, int Level, ref DRIVER_INFO_6 pDriverInfo);

Код для вызова с

private bool InstallPrinterDriver(ref DRIVER_INFO_6 printerDriverInfo)
{
    bool printerDriverInstalled = false;
    printerDriverInstalled = NativeMethods.AddPrinterDriver(null, 6, ref printerDriverInfo);
    if (printerDriverInstalled == false)
    {
        //int lastWinError = Marshal.GetLastWin32Error();
        //throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not add printer Zody PDF printer driver.");
        logEventSource.TraceEvent(TraceEventType.Error,
                                      (int)TraceEventType.Error,
                                      "Could not add Zody PDF printer driver. " +
                                      String.Format(WIN32ERROR, Marshal.GetLastWin32Error().ToString()));
        Console.Write("\n" + String.Format(WIN32ERROR, Marshal.GetLastWin32Error().ToString()));
        Console.Write("\n"+printerDriverInfo);
    }
    return printerDriverInstalled;
}

Результат всегда терпит неудачу с кодом ошибки 216, даже если я пробовал так много способов, как изменить pEnvironment = null или Windows NT x86. Затем запустить с правами администратора и так далее.

Обновление: объяснение ошибки 216: эта версия% 1 не совместима с версией Windows, которую вы используете. Проверьте системную информацию вашего компьютера, а затем свяжитесь с издателем программного обеспечения. -> это означает, что я могу запустить 64-битную программу на 32-битной. Но я почти уверен, что пакет был собран на 32-битной (x86) машине из Visual Studio 2015.

...