これは、(Windows 7でも)64ビットデバイスでも動作できるように、DriverPackagePreinstall()
(Pinvokeを使用)を呼び出すアプリケーションをコンパイルする方法はありますか?それは32ビットをターゲットにしていますか?DriverPackagePreinstallを64ビットで動作させる(32ビットにコンパイル)
その理由は、それが32ビットを対象としますが、また64ビットプラットフォーム上で実行する必要があります(Windowsインストーラプロジェクトを使用して)はるかに大きなアプリケーションのインストーラの一部として実行されますされています。私は、このターゲットのx86を構築し、64ビットマシン上で実行しようとすると、私はエラーE0000235
(ERROR_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'
ビルド時にこのエラーを見落とす(とときとにかくそれを実行するためのインストーラを取得する方法プロジェクトがインストールされている)良いだろう。