(InstallShield) Исполняемый файл WPF Вызывает неверную версию DLL, если не запускается от имени администратора
У меня очень странная проблема с моим исполняемым проектом. Я создал это в режиме выпуска (x86), используя InstallShield для создания пакета.
Недавно этот развернутый исполняемый файл начал вести себя странно (я пытался откатиться назад и найти причину, но это не помогло). Когда я создаю свой исполняемый файл через мой проект InstallShield, он выглядит так, как ожидал id.
Проблема, которую я получаю, это запуск приложения. Если я работаю как администратор, я могу войти и запустить все как положено. Однако, если я не запускаю это как администратор, я получаю следующую ошибку (при первом упоминании использования класса с использованием newtonsoft.json.dll:
[System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия =9.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Имя файла: 'Newtonsoft.Json, версия =9.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed' ---> System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, Версия =4.5.0.0, Культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Имя файла: 'Newtonsoft.Json, версия =4.5.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed'
WRN: регистрация привязки сборки выключена. Чтобы включить ведение журнала ошибок привязки сборки, задайте для параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) значение 1. Примечание. С журналированием ошибок привязки сборки связано некоторое снижение производительности. Чтобы отключить эту функцию, удалите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog].
в System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() в Player.Services.DataService.UploadLogToServer(запись AuditDTO)
в Player.Controller.PlayerControls.logInfo (String eventCode, String information, String className, Exception e)]
Я не вижу этого вообще, если я бегу как администратор. Я пробовал множество решений в нескольких ответах на похожие вопросы, связанные с ошибкой ссылок на dll и т. Д. Ни один из них не помог. У меня нет никаких ссылок ни на одну из этих версий. В настоящее время я использую версию 10.0.0.0 (пакет Nuget 10.0.3), я также пытался использовать версию 9.0 для устранения ошибок, необходимых для версии 9. Это также имеет тот же результат, что и выше. Я проверил, что это правильная dll и версия для моей.net Framework, и я пытался более 50 раз удалить его, а затем переустановить, обновить, вручную ссылаться на него.
Я попытался изменить разрешения безопасности для всех пользователей на моем компьютере, чтобы предоставить всем / каждому полный доступ и права на все папки, в которых развернут мой исполняемый файл. Опять же, это также не решило проблему.
Я также попытался очистить все другие ссылки на newtonsoft.json.dll с ПК в очевидных местах, а также во все временные папки, скрытые папки, папки visual studio и microsoft, которые содержат все, что связано с моим проектом или newtonsoft.json. длл.
Я очистил все мои сборки (папки отладки и выпуска), вся папка решения была очищена и перестроена, и я до сих пор не знаю, что происходит и как решить эту проблему.
ВАЖНОЕ ПРИМЕЧАНИЕ: Когда я собрал свой проект (режим выпуска), я могу запустить exe, как и ожидалось (обычный пользователь), из папки bin/x86/release моего проекта без возникновения ошибки. это наводит меня на мысль, что это может быть связано с установкой щита или с моей конфигурацией установки щита? Не уверен, но это может быть полезной информацией.
Любые предложения, идеи или если кто-то сталкивался с чем-то подобным и исправил это, я был бы очень признателен за любые советы и предложения, которые вы можете дать мне ниже.
ОБНОВИТЬ:
Ответ Евгения Б помог решить эту проблему. Хотя это исправление не может быть лучшей практикой, и я все еще не уверен, почему или как это произошло, или даже в чем корень проблемы, я поделюсь, как я исправил проблему ниже:
Спасибо за предложение. К сожалению, логи не предоставили никакой полезной информации по этому вопросу. Похоже, что это тот случай, когда добавляется версия, которой нет на моей машине или на которую нет ссылок в моем проекте. Последняя часть вашего ответа помогла мне решить проблему. Я добавил эталонную версию dll: 9.0.0.0 непосредственно в файлы installshield. После этого я решил откатить мою версию 10.0.0.0 dll в проекте wpf до версии 9. Наконец, он снова работает как администратор и обычный пользователь. Я хотел бы узнать, в чем здесь корень проблемы. Большое спасибо!!
Если кто-то знает или понимает причину проблемы и почему файл installshield запрашивает версию 9 этого файла, ответьте или добавьте комментарий ниже.
1 ответ
Посмотрите журнал компиляции проекта InstallShield. Если в вашем проекте нет явного перечисления сборки, и если InstallShield определяет, что это зависимость, которую необходимо добавить, она добавит ее для вас и создаст запись в журнале компиляции (обычно находится в подкаталоге). \Лог-файлы). Возможно, он добавил версию, которая либо не существует на целевом компьютере, либо находится в каталоге с другим уровнем доступа, поэтому доступ к нему имеют только администраторы. Если вы этого еще не сделали, попробуйте явно добавить сборку в проект InstallShield (InstallScript).