1

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

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

除了 .NET 之外,应用程序没有任何附加引用。

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

4

2 回答 2

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

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

于 2009-07-08T11:04:40.403 回答
1

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

于 2009-07-08T11:10:37.740 回答