隐藏打开的Excel文件

时间:2011-06-08 12:48:13

标签: c# excel com

这是我的问题:

我开发了一个程序,它使用Microsoft.Excel COM组件来读取/写入Excel文件。好吧,我的应用程序运行良好但是当我在程序运行时直接用Excel打开另一个文件时,我的应用程序使用的文件出现在Excel中。我不想要这个。我也尝试了Excel Application类的Visibility属性,但这不是解决方案,它只是不起作用。

注意:我已经检查了这个问题。

Restrict access to excel file opened by C# program

然而,它实际上没有说明适当的解决方案。

2 个答案:

答案 0 :(得分:3)

您可以使用Application.IgnoreRemoteRequests = true。这将避免用户在与您正在使用的进程相同的Excel进程中打开Excel文件。

但有一点需要注意:您必须确保应用程序的所有执行路径都将此属性重置为false。当您退出并释放Excel应用程序时,此属性将不会重置自身,这意味着Excel将无法正确响应双击* .xls文件的后续用户例如。

编辑:IgnoreRemoteRequest可能出现的问题

好的,为了更清楚,我将详细介绍使用此功能可以遇到的问题(至少这些是我必须使用此功能时遇到的唯一问题)。

设置IgnoreRemoteRequests = true时,您必须确保在退出和/或释放COM Excel应用程序之前重置此属性。如果不这样做,Excel将不响应DDE请求,这意味着如果有人双击* .xls文件,该文件将无法打开(Excel将启动,但它不会自动打开文件)。

但是,如果您在不重置属性的情况下退出应用程序和/或将其释放,则此情况才适用。您只需要确保在您的代码中放弃/重置的任何位置,您之前将IgnoreRemoteRquests设置回false

如果您的应用程序崩溃并且无法清理(未处理的异常),那么EXCEL进程将继续运行(如果不可见,您将只在任务管理器中看到它)。这是正常的,因为您的应用程序没有机会退出并释放它正在使用的内部Excel。然而,这不是问题。如果用户忽略这个“泄露”的Excel进程,直到它最终在下次重启或其他任何事情中被杀死,或者从任务栏手动杀死它,Excel将完全正常工作。

注意:MS Excel 2007.不了解以前版本的行为。

答案 1 :(得分:0)

您是否尝试在服务帐户下运行程序?这应该避免excel com对象干扰登录控制台用户使用的实例,因此他们不会看到com对象的效果。在服务帐户而不是用户帐户下运行COM类型应用程序可能也是更好的安全做法,但那是另一个问题。