2017-01-24 6 views
0

Есть ли способ, которым я могу скомпилировать приложение, которое вызывает 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'

В качестве альтернативы способ получения Установщик пропустить эту ошибку во время сборки (и запустить его в любом случае, когда проект устанавливается) было бы хорошо.

ответ

0

Я работал над этим, добавляя 64-разрядную и 32-разрядную версии приложения в самораспаковывающийся zip-файл вместе с пакетным файлом, который решает, какой из них выполнить.

Самораспаковывающийся 32-разрядный exe, так что никто не говорит Visual Studio, что он содержит 64-битный, он работает.

Смежные вопросы