私は今日の午後、Windows Vistaを搭載した顧客のボックスでテストしていました(彼は家にいましたが、同じ結果のBusiness Editionでテストしています)。
コンピューターのハードウェアIDを取得する.DLLを使用します。使い方はとても簡単で、私が作成したサンプルプログラムは機能します。DLLはAzSdkのThisです。実際、これはWindowsXPで完全に機能します。ただし、奇妙な理由で、プロジェクト内(はるかに大きい)で、次の例外が発生します。
Exception Type: System.DllNotFoundException
Exception Message: Unable to load DLL 'HardwareID.dll': Invalid access to memory location. (Exception from HRESULT: 0x800703E6)
Exception Target Site: GetHardwareID
フォルダを完全に制御できるので、何が問題を引き起こしているのかわかりません。プロジェクトはac#.net Windowsフォームアプリケーションであり、外部ライブラリの呼び出しを除いて、すべてが正常に機能します。
私はそれを次のように宣言しています:(注:これはCOMライブラリではなく、登録する必要はありません)。
[DllImport("HardwareID.dll")]
public static extern String GetHardwareID(bool HDD,
bool NIC, bool CPU, bool BIOS, string sRegistrationCode);
そして、呼び出しコードは非常に単純です。
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = GetHardwareID(cb_HDD.Checked,
cb_NIC.Checked,
cb_CPU.Checked,
cb_BIOS.Checked,
"*Registration Code*");
}
サンプルアプリケーションを作成すると機能しますが、私のプロジェクト内では機能しません。XPでは正常に動作します。これを機能させるためにVistaで何をすべきかについてのアイデアはありますか?私が言ったように、フォルダとそのサブフォルダは「Everybody」を完全に制御できます。
更新:VistaSP1がインストールされていません。
更新2: Vista SP1をインストールしましたが、UACを無効にすると、単純なサンプルでも機能しません!!! :(くそービスタ。