Сегодня я проводил тестирование на клиентской коробке с Windows Vista (у него был дом, но я тестирую на Business Edition с такими же результатами).
Мы используем .DLL, который получает аппаратный идентификатор компьютера. Его использование очень простое, и созданный мной пример программы работает. Dll Это от AzSdk .
На самом деле, это прекрасно работает под 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
Я не знаю, что может быть причиной проблемы, так как у меня есть полный контроль над папкой. Проект представляет собой c # .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*");
}
Когда вы создаете пример приложения, оно работает, а внутри моего проекта - нет. Под ХР работает нормально. Любые идеи о том, что я должен делать в Vista, чтобы это работало?
Как я уже сказал, папка и ее подпапки имеют полный доступ для «всех».
ОБНОВЛЕНИЕ: У меня не установлена Vista SP 1.
ОБНОВЛЕНИЕ 2: Я установил Vista SP1 и теперь, с отключенным UAC, не работает даже простой пример !!! :( Блин Виста.