2017-01-24 33 views
0

これは、(Windows 7でも)64ビットデバイスでも動作できるように、DriverPackagePreinstall()(Pinvokeを使用)を呼び出すアプリケーションをコンパイルする方法はありますか?それは32ビットをターゲットにしていますか?DriverPackagePreinstallを64ビットで動作させる(32ビットにコンパイル)

その理由は、それが32ビットを対象としますが、また64ビットプラットフォーム上で実行する必要があります(Windowsインストーラプロジェクトを使用して)はるかに大きなアプリケーションのインストーラの一部として実行されますされています。私は、このターゲットのx86を構築し、64ビットマシン上で実行しようとすると、私はエラーE0000235ERROR_IN_WOW64)を取得し、

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); 

     } 
    } 
} 

は、ここに私のコードです。このエラーは、x64ターゲティングを構築すると消えてしまいます。

これで2度コンパイルして、インストール先のプラットフォームに基づいてインストーラにインストールするかどうかを決定させても構いません。またしかし、私は64ビット版を含めて、インストーラをビルドしようとすると、私はエラーを取得し、

263 File 'MyDriver.x64.exe' targeting 'AMD64' is not compatible with the project's target platform 'x86'

ビルド時にこのエラーを見落とす(とときとにかくそれを実行するためのインストーラを取得する方法プロジェクトがインストールされている)良いだろう。

答えて

0

私が実行するかを決定するバッチファイルと共に自己解凍ZIPファイルにアプリケーションの64ビットと32ビットの両方のバージョンを追加することによってこの問題を回避働きました。

自己抽出プログラムは32ビットのexeですので、Visual Studioには64ビットのものが含まれているとは限りません。

関連する問題