应用程序在Windows XP中运行良好,但在Windows 7中运行时崩溃?

3

我在我的Windows XP机器上使用VS 2010开发了一个WPF应用程序,目标是.NET Framework 3.5 SP1,并使用WPF工具包。我已经使用Sqlite作为应用程序的数据库。当我将该应用程序部署到Windows XP SP2或SP3上时,它可以正常运行。但是当我将此应用程序部署到Windows 7 Home Premium x64或Windows 7 Ultimate x84上,并单击打开弹出窗口的按钮时,应用程序会崩溃。但是,当我将兼容性模式设置为Windows XP SP3时,该应用程序在Windows 7上可以正常运行。我对这个问题感到非常困惑,请告诉我您是否找到了问题和解决方案?


1
你是否使用任何本地调用?(例如DLL或P / Invoke或“不安全”)。 如果是这样,那么相对容易创建一个只在x86上工作但在x64上工作或反之亦然的内容。 (也就是说,我认为它与版本无关,而与位数有关。兼容性不影响位数。请在Windows 7 * x86 *上尝试验证。) - user166390
3个回答

2

最好的方法是在Win7机器上安装开发环境并在调试器中运行程序。

如果这不是一个选项,你可以向AppDomain.UnhandledException添加事件处理程序。在事件处理程序中添加一个简单的调用消息框,显示尽可能多的异常信息,包括堆栈跟踪。这应该会显示导致程序崩溃的错误。


这与签名文件和未签名文件有关吗? - sambit.albus
即使您无法附加调试器,仍然可以调试 minidump。 - tenfour

1
我认为我已经找到了解决方案。当我尝试将应用程序安装到程序文件以外的任何其他位置时,应用程序可以正常工作。可能问题是我将sqllite db文件放在默认情况下为c:\program files的安装文件夹中,在win 7中拒绝写入权限。因此,当我尝试插入任何记录到数据库中时,会显示一个错误。

了解UAC,然后您将了解如何正确使用它。阅读http://technet.microsoft.com/en-us/library/cc709691(v = ws.10).aspx。 - Lex Li

0

很可能,您正在使用在Windows 7中受限制的路径。您是否在以下任何路径中编写数据或存储数据库?这些路径需要管理员访问权限才能进行写入。

文件夹
C:\Documents and Settings\All Users
C:\Program Files
C:\ProgramData

注册表
HKEY_CLASSES_ROOT
HKEY_LOCAL_MACHINE

请注意,您的应用程序很可能安装在Program Files中,因此在相同文件夹中安装的任何设置文件或数据库都将是只读的。

解决方案是将动态文件重定位到像%AppData%%LocalAppData%这样的位置,或修改所需文件或文件夹的权限以允许所有用户读/写访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接