如何确定我的程序在新的 "fresh" 系统上 运行 的先决条件?

How can I determine the prerequisites for my program to run on a new, "fresh" system?

我已经完成了一个项目的工作,除了一个问题外,一切都准备就绪:安装后,它无法 运行 在新系统(即从未更新过的系统,安装了任何东西,或其他任何东西)。

系统通过Microsoft Setup and Deployment project安装,成功下载.Net Framework 4.5但还是失败运行,报错完全没用

程序基于.Net 4.5框架编写,C#语言编写/WPF/XAML。除了需要 .Net 4.5 之外,我还应该检查 for/downloading 目标系统的其他哪些先决条件?

当我说“它无法 运行”时,我的意思是程序没有启动。用户双击快捷方式,他们会看到一个消息框,上面写着

PROGRAM has stopped working.

A problem has caused the program to stop working correctly.

Windows will close the program and notify you if a solution is available

还有;该程序在其他系统上运行得非常好,只是它似乎是刚开箱即用的系统,但它却失败了(以上述方式)。

简短的回答是您需要确定您的程序使用的软件不是 .NET Framework 的一部分。这可能包括 Crystal 报告、一些 SQL 组件、任何第三方 NET 控件、COM 组件。通常第一个切入点是 Microsoft vs 3rd party,因为 3rd party 软件不会出现在某人的随机系统上。之后,查看您可能使用的哪些 Microsoft 组件是单独的可再发行组件。

将消息框作为程序执行的第一件事(作为测试)可能会很有用。如果它全部是 .NET 并且它启动了,那么可能大多数 NET 引用都在那里。如果它没有启动,您可能缺少引用的程序集。如果它稍后崩溃,那么您所需要的只是一些诊断或跟踪数据(以及错误处理),以查看您是否试图做一些事情,比如创建一个尚未安装的 COM 对象。

但是,如果这不是依赖性问题,那么如果您构建 AnyCpu 并尝试调用具有错误位数的 Dll,而不是为 64 位和 32 位系统设计,则可能是架构问题。或者,如果您正在做一些非常不寻常的事情,数据执行保护可能会阻止程序 运行 - 我想您会在这些情况下看到该消息。我还怀疑某些防病毒程序会介入并在看到代码执行禁止的操作时导致此错误。