如何确保WPF应用程序在用户计算机上完美运行?

时间:2009-07-08 10:58:00

标签: .net wpf dependencies distribution

最近我制作了WPF应用程序,并希望为许多用户发布它,但应用程序似乎在某些目标用户计算机上存在问题。它只是在用户启动它时崩溃。我使用.NET Framework v.3.0构建应用程序作为目标版本,用户计算机安装了.NET Framework。我只想要一种方法来确保(例如安装系统)我的应用程序将运行而没有错误。

真正奇怪的是,在我的测试PC上(没有安装Visual Studio,只有3.0 .NET Framework),它运行得很好。

除了.NET之外,

应用程序没有任何其他引用。

以下是下载此应用程序的链接,如果您需要,可以对其进行测试: http://nippon.is74.ru/ForismaticTray.7z

2 个答案:

答案 0 :(得分:2)

使用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

Micorsoft

下载并打包3.5 SP1

有关NSIS

的更多信息

更新:对于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0文件夹的3.0检查注册表。

答案 1 :(得分:1)

这可能是.NET服务包问题吗?如果您使用Visual Studio 2008编写应用程序,即使您明确将其设置为目标.NET 3.0,您的应用程序基本上也将面向.NET 3.0 SP1,因为它是由.NET 3.5安装的(由Visual Studio安装) 2008)。您可以尝试将用户的计算机升级到.NET 3.0 SP1(我相信可以在Microsoft网站上单独下载),看看是否可以解决问题。