Есть ли способ, которым я могу скомпилировать приложение, которое вызывает DriverPackagePreinstall()
(используя Pinvoke) таким образом, что он может работать на 64-разрядных устройствах (Windows 7) даже хотя он нацелен на 32-битный?DriverPackagePreinstall для работы на 64 бит (скомпилировано до 32 бит)
Причина в том, что он будет запущен как часть установщика гораздо большего приложения (с использованием Windows Installer Project), который будет нацелен на 32 бит, но должен также работать на 64-битной платформе.
Вот мой код:
using System;
using System.Linq;
using System.Runtime.InteropServices;
namespace MyDriver
{
class Program
{
static void Main(string[] args)
{
if (args.Count() == 0)
{
Console.WriteLine("Please specify filename!");
return;
}
int result= DriverPackagePreinstall(args[0], 0);
if (result == 0)
{
Console.WriteLine("Success");
} else {
Console.WriteLine("Error: 0x{0}", result.ToString("X8"));
}
}
[DllImport("DIFxAPI.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Int32 DriverPackagePreinstall(
[MarshalAs(UnmanagedType.LPTStr)] string DriverPackageInfPath,
Int32 Flags);
}
}
}
Если я строю это таргетингом x86, и попытаться работать на 64-битной машине, я получаю сообщение об ошибке E0000235
(ERROR_IN_WOW64
). Эта ошибка исчезает, если я создаю таргетинг x64.
Теперь я не возражаю против его компиляции в два раза и позволяю установщику решить, установить его на платформе, на которой он устанавливается. Однако, если я пытаюсь построить установки, а в том числе 64-битной версии я получаю ошибку,
263 File 'MyDriver.x64.exe' targeting 'AMD64' is not compatible with the project's target platform 'x86'
В качестве альтернативы способ получения Установщик пропустить эту ошибку во время сборки (и запустить его в любом случае, когда проект устанавливается) было бы хорошо.