这个问题可能有点奇怪,但我希望我的程序能够运行构建错误。我正在使用Windows窗体(c#),在初始化主窗体之前,程序会检查我是否安装了Adobe Reader。这是必要的,因为某些表单旨在使用Adobe的COM扩展。
所以我希望我的程序在启动时检查是否安装了Adobe Reader,如果是,则继续,如果不是,请执行提供的Adobe安装程序。我的问题是,如果没有安装Adobe Reader,程序甚至不会执行,因此它甚至无法检查安装,因为它无法识别代码的某些部分。
我是否必须使用另一个程序,然后在安装Adobe时执行主程序,或者是否有解决方法,以便我只能使用主应用程序?
答案 0 :(得分:1)
在开始程序之前,您应该考虑使用某种Launcher或Installer来检查所有请求的先决条件。
我建议您添加另一个检查adobe安装的应用程序,并在验证/安装完成后启动您自己的应用程序。
答案 1 :(得分:0)
这个“解决方案”有两个部分:
我解决这个问题的方式(因此它至少会构建)是包含引用的DLL / COM对象(在引用上,选择“复制到本地”并将其设置为true)。将它们解压缩到一个文件夹, 允许您至少在应用程序出错时构建,因为引用可用。我已经看到这个使用非常成功对抗COM对象。
假设您的解决方案的基本目录中有一个“Common Libraries”文件夹,您将在具有所需内容(Adobe的COM对象)的良好副本的计算机上构建应用程序后导航到bin目录。然后,您将相应的Adobe DLL从该文件夹复制到公共库中,删除对Adobe COM的引用,然后重新添加指向“Common Libraries”文件夹中的DLL。您可能必须选择不在应用程序中嵌入类型(也是参考属性的一部分)。
第二部分是检查申请并确定其状态。我想甚至尝试使用没有应用程序存在的COM对象应该会产生某种错误 - 我已经看到人们使用try-catch块来“修复”这个。这不是一个很好的编程实践,所以你可以做的任何事情来扫描它,否则更好,但为了快速和简单,try-catch通常会起作用。