Я пытаюсь создать виртуальный принтер, используя 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.