Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐藏打开的Excel文件_C#_Excel_Com - Fatal编程技术网

C# 隐藏打开的Excel文件

C# 隐藏打开的Excel文件,c#,excel,com,C#,Excel,Com,我的问题是: 我开发了一个程序,使用Microsoft.Excel COM组件读取/写入Excel文件。嗯,我的应用程序做得很好,但是当我打开另一个文件时,例如,当我的程序运行时,我的应用程序使用的文件会显示在Excel中。我不要这个。我还尝试了Excel应用程序类的可见性属性,但这不是解决方案,它就是不起作用 注:我已签出此问题 但是,它说实际上没有合适的解决方案。您是否尝试过在服务帐户下运行您的程序?这应该避免excel com对象干扰登录控制台用户使用的实例,因此他们不会看到com对象的

我的问题是:

我开发了一个程序,使用Microsoft.Excel COM组件读取/写入Excel文件。嗯,我的应用程序做得很好,但是当我打开另一个文件时,例如,当我的程序运行时,我的应用程序使用的文件会显示在Excel中。我不要这个。我还尝试了Excel应用程序类的可见性属性,但这不是解决方案,它就是不起作用

注:我已签出此问题


但是,它说实际上没有合适的解决方案。

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

您可以使用
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。不知道先前版本的行为。

可选地,考虑一下像NPOI这样的东西,这样就不需要使用Excel了。等等,如果你编写了一个设置应用程序的程序。NealReMeReTyStests=真,你可以在同一个窗口永久禁用Excel打开文档吗?这是一个我从来都不想要的“特色”。看看海报上的要求。如果设置IgnoreRemoteRequests=true,则打开excel文件的用户将在与应用程序内部使用的excel进程不同的新excel进程中打开该文件,如果最初打开该文件,则该文件将保持隐藏状态。如果您不想让用户在应用程序内部使用的工作簿上乱搞,这可能会很有趣。退出内部excel流程时会出现问题。如果您不重置属性,那么您可能会遇到问题。我是说,它们在同一个窗口中打开,这让我非常恼火,我想问的是,在一个程序中这样做一次是否会永久更改excel?对不起,连接已断开。如果有兴趣,可以对我的答案进行编辑。啊,如果你不清理,你的解释会导致意外/不想要的行为。