Как гарантировать, что приложение WPF будет отлично работать на компьютере пользователя?

StackOverflow https://stackoverflow.com/questions/1097362

Вопрос

Недавно я создал приложение 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) и посмотреть, устраняет ли это проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top