最近我制作了WPF应用程序,并希望为许多用户发布它,但应用程序似乎在某些目标用户计算机上存在问题。它只是在用户启动它时崩溃。我使用.NET Framework v.3.0构建应用程序作为目标版本,用户计算机安装了.NET Framework。我只想要一种方法来确保(例如安装系统)我的应用程序将运行而没有错误。
真正奇怪的是,在我的测试PC上(没有安装Visual Studio,只有3.0 .NET Framework),它运行得很好。
除了.NET之外,应用程序没有任何其他引用。
以下是下载此应用程序的链接,如果您需要,可以对其进行测试: http://nippon.is74.ru/ForismaticTray.7z
答案 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
下载并打包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网站上单独下载),看看是否可以解决问题。