我今天下午在一个装有 Windows Vista 的客户的盒子上进行测试(他有家,但我在 Business Edition 上进行测试,结果相同)。
我们使用 .DLL 获取计算机的硬件 ID。它的用法非常简单,我创建的示例程序有效。DLL 是来自 AzSdk 的 This。事实上,这在 Windows XP 下完美运行。然而,出于某种奇怪的原因,在我们的项目中(更大),我们得到了这个异常:
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 Forms 应用程序,一切正常,除了对外部库的调用。
我这样声明它:(注意:它不是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 中做什么来完成这项工作的任何想法?正如我所说,该文件夹及其子文件夹对“所有人”具有完全控制权。
更新:我没有安装 Vista SP 1。
更新 2:我已经安装了 Vista SP1,现在,在禁用 UAC 的情况下,即使是简单的示例也无法正常工作!!!:( 该死的维斯塔。