Как гарантировать, что приложение WPF будет отлично работать на компьютере пользователя?
-
11-09-2019 - |
Вопрос
Недавно я создал приложение WPF и хочу опубликовать его для многих пользователей, но, похоже, у приложения возникли проблемы на некоторых компьютерах целевых пользователей.Он просто выходит из строя, когда пользователь запускает его.Я создаю приложение с .NET Framework v.3.0 в качестве целевой версии, и на компьютере пользователя установлен .NET Framework.Мне просто нужен способ гарантировать (например, при установке системы), что мое приложение будет работать без ошибок.
Что действительно странно, на моих тестовых КОМПЬЮТЕРАХ (без установленной Visual Studio, но только с .NET Framework 3.0) он работает отлично.
В приложении нет никаких дополнительных ссылок, кроме .ЧИСТЫЕ.
Вот ссылка для загрузки этого приложения, так что, если вы хотите, вы можете протестировать его:http://nippon.is74.ru/ForismaticTray.7z
Решение
Используйте установщик, такой как NSIS, и проверьте наличие вашего фреймворка.Если его нет на целевом компьютере, установите его.Вот что я делаю в NSIS
Function IsDotNetInstalledAdv
!insertmacro MUI_HEADER_TEXT "Checking for prerequisites." "Checking for .net framework 3.5 SP1.."
ReadRegDWORD $0 HKLM "software\Microsoft\NET Framework Setup\NDP\v3.5" "SP"
StrCmp $0 1 skip.DotNet
!insertmacro MUI_HEADER_TEXT "Installing .net framework." "Installing .net framework 3.5 SP1.."
DetailPrint "Proceeding to install dotnet bootstrap installer...."
sleep 1000
MessageBox MB_YESNO|MB_ICONQUESTION "This software requires DotNet framework ${MIN_FRA_MAJOR}.${MIN_FRA_MINOR}.${MIN_FRA_BUILD}.$\r$\n$\r$\nDo you wish to install it now?" IDNO skip.DotNet
SetOutPath $TEMP
File "${PACKAGE_DIR_BIN}\dotNetFx35setup.exe"
GetDlgItem $0 $HWNDPARENT 1
System::Call "kernel32::CreateMutexA(i 0, i 0, t 'DotNetInstall') i .r0 ?e"
HideWindow
ExecWait "$TEMP\dotNetFx35setup.exe /qbf /norestart" $1
Delete "$TEMP\dotNetFx35setup.exe"
ShowWindow $0 ${SW_SHOW}
BringToFront
IntCmp $1 0 skip.DotNet
IntCmp $1 8192 skip.DotNet
IntCmp $1 3010 0 DotNetInstallationFailed DotNetInstallationFailed
SetRebootFlag true
goto skip.DotNet
DotNetInstallationFailed:
HideWindow
MessageBox MB_OK|MB_ICONSTOP "DotNet Framework 3.5 was not successfully installed on the machine"
Quit
skip.DotNet:
FunctionEnD
Загрузите и упакуйте 3.5 SP1 с Микорсофт
Подробнее о НСИ
Обновить:Для версии 3.0 проверьте реестр на наличие HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0
папка.
Другие советы
Может ли это быть проблемой с пакетом обновления .NET?Если вы используете Visual Studio 2008 для написания своего приложения, даже если вы явно настроите его на .NET 3.0, ваше приложение в основном будет нацелено на .NET 3.0 с пакетом обновления 1, поскольку он устанавливается с помощью .NET 3.5 (который устанавливается с помощью Visual Studio 2008).Вы могли бы попробовать обновить компьютер пользователя до .NET 3.0 SP1 (который, я полагаю, доступен в виде отдельной загрузки с сайта Microsoft) и посмотреть, устраняет ли это проблему.