У меня есть простой проект, который больше не работает, и похоже, что причиной является обновление Windows. Я использую Visual Studio 2010 в Windows 7. Проект имеет 64 бит. Он по-прежнему работает на некоторых компьютерах, но не работает на компьютерах, которые недавно обновлялись.Нужна помощь в правильном использовании Registry.GetValue
Вот исходный код:
Dim appPath As String = Registry.GetValue("HKEY_CURRENT_USER\SOFTWARE\Our Company Inc.\SoftwareName.exe", "Path", "Not Found")
appPath &= "Colorbar.col"
Dim sid : sid = "S-1-1-0"
Dim objWMI : objWMI = GetObject("winmgmts://./root\cimv2")
Dim objSID : objSID = objWMI.Get("Win32_SID='" & sid & "'")
Dim userAccount As String = objSID.AccountName
Dim fileInfo As IO.FileInfo = New IO.FileInfo(appPath)
Dim fileAcl As New FileSecurity
fileAcl.AddAccessRule(New FileSystemAccessRule(userAccount, FileSystemRights.FullControl, AccessControlType.Allow))
fileInfo.SetAccessControl(fileAcl)
Я положил ключ значение пары «Путь» и «[TARGETDIR]» в редакторе реестра и выводимую из этого инсталлятор класса (приведенный выше код) в пользовательских действиях Install and Commit.
Этот код, который используется для работы в настоящее время возвращает «Исключение было брошено в целью вызова -> C: \ Windows \ SysWOW64 \ Colorbar.col»
Я проверил реестр, когда это сообщение появляется и путь правильный, поэтому я не знаю, откуда идет SYSWOW64.
Я попытался изменить получение AppPath с помощью этого кода:
Dim regKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64)
regKey = regKey.OpenSubKey("SOFTWARE\Our Company Inc.\SoftwareName.exe")
Dim appPath As String = regKey.GetValue("Path").ToString
Это возвращает «ссылка на объект не указывает на экземпляр объекта» ошибка.
Я сделал тестовое приложение Windows Form и поместил обе версии кода в событие кнопки. Все работает так, как ожидалось. Любые идеи, почему код больше не работает в проекте настройки и что я могу сделать, чтобы заставить его работать снова?
Заранее спасибо.