Excel 2010 互操作问题
Excel 2010 interop issues
是的,这让我 发疯。这在 Excel 2013 本地运行良好,但是当网站发布到 Excel 2010 远程服务器时失败。据我所见,DCOM 配置在本地与远程相同。
在与 Excel 2010 和 DCOM 权限斗争了一个多小时后,现在我得到的最好的是这个例外:System.Runtime.InteropServices.COMException (0x80070BBC): Office has detected a problem with this file. To help protect your computer this file cannot be opened.
这是网络应用程序尝试从刚刚上传到的位置打开 *.xls 文件的结果。应用程序池是 ApplicationPoolIdentity
下的 运行,我已经在 Launch and Activation Permissions
上的 mmc -32
下为这个特定的应用程序池设置了权限,所以没有问题 运行 Excel.我认为我在这里面临的是保护模式问题,因为文件绝对没有损坏。
我进入了 Excel 和信任中心设置,并将 *.xls 文件上传到(并随后打开)的位置添加为受信任的位置。如果我在托管服务器上(在我的域帐户下)打开文件,我没有在文件上获得受保护的视图块 - 但是,DCOM 配置上的 Identity 设置为启动用户。那么,以下内容(或我未列出的内容)意味着什么:
- 我需要在组策略级别将此位置添加为受信任位置,因为启动实际应用程序的帐户在其配置文件中没有此配置?
- 我需要在服务器上创建一个实际帐户并将此帐户用作 运行 应用程序的身份?
- ... ?
澄清一下,我已经了解了 C:\Windows\System32\config\systemprofile\Desktop
和 C:\Windows\SysWOW64\config\systemprofile\Desktop
的 DCOM 安全配置路线和荒谬的问题。配置为:
- .NET 4.5(经典管道)应用程序池 运行 在 ApplicationPoolIdentity
下
- DCOM Config > Security > Launch and Activation Permissions 都设置为此特定身份(访问权限和配置权限都设置为 Use Default)
- 文件已正确上传并出现在目标位置,在服务器本身(在我的域帐户下)上打开尊重受信任的位置并且不会发出保护模式警告
- 解析过程因上述异常而失败。
如果相关的话,这是我正在使用的 Interop 程序集的屏幕截图。
好的......对于任何在这个问题上绊脚石的人,我都硬着头皮做了以下事情:
- 创建一个本地帐户(在我的实例中为 AutomatedOffice)并将此帐户下的 DCOM 配置设置为 运行 Excel
- 使用上述帐户登录并更改 Excel 设置以将应用程序根目录中的文件夹添加到受信任的位置并禁用保护模式消息
- 允许"Network Service"在本地调用 DCOM 进程(通过服务器 DCOM 配置而不是 CLSID 配置)
- 在 C:\Windows[System32|SYSWOW64]\config\systemprofile\Desktop paths
上为此帐户添加 NTFS 权限
奇怪的是,在创建帐户后我得到了以下异常 Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied.
,通过将 HOST\Users
和 HOST\NetworkServices
组添加到 DCOM 安全(仅限本地!!! ) 设置。
您需要在信任中心添加您的网站发布文件夹的安全位置,例如,如果您的网站从 c:\temporal\ 读取文件,您必须添加 excel,安全位置文件夹名称
是的,这让我 发疯。这在 Excel 2013 本地运行良好,但是当网站发布到 Excel 2010 远程服务器时失败。据我所见,DCOM 配置在本地与远程相同。
在与 Excel 2010 和 DCOM 权限斗争了一个多小时后,现在我得到的最好的是这个例外:System.Runtime.InteropServices.COMException (0x80070BBC): Office has detected a problem with this file. To help protect your computer this file cannot be opened.
这是网络应用程序尝试从刚刚上传到的位置打开 *.xls 文件的结果。应用程序池是 ApplicationPoolIdentity
下的 运行,我已经在 Launch and Activation Permissions
上的 mmc -32
下为这个特定的应用程序池设置了权限,所以没有问题 运行 Excel.我认为我在这里面临的是保护模式问题,因为文件绝对没有损坏。
我进入了 Excel 和信任中心设置,并将 *.xls 文件上传到(并随后打开)的位置添加为受信任的位置。如果我在托管服务器上(在我的域帐户下)打开文件,我没有在文件上获得受保护的视图块 - 但是,DCOM 配置上的 Identity 设置为启动用户。那么,以下内容(或我未列出的内容)意味着什么:
- 我需要在组策略级别将此位置添加为受信任位置,因为启动实际应用程序的帐户在其配置文件中没有此配置?
- 我需要在服务器上创建一个实际帐户并将此帐户用作 运行 应用程序的身份?
- ... ?
澄清一下,我已经了解了 C:\Windows\System32\config\systemprofile\Desktop
和 C:\Windows\SysWOW64\config\systemprofile\Desktop
的 DCOM 安全配置路线和荒谬的问题。配置为:
- .NET 4.5(经典管道)应用程序池 运行 在 ApplicationPoolIdentity 下
- DCOM Config > Security > Launch and Activation Permissions 都设置为此特定身份(访问权限和配置权限都设置为 Use Default)
- 文件已正确上传并出现在目标位置,在服务器本身(在我的域帐户下)上打开尊重受信任的位置并且不会发出保护模式警告
- 解析过程因上述异常而失败。
如果相关的话,这是我正在使用的 Interop 程序集的屏幕截图。
好的......对于任何在这个问题上绊脚石的人,我都硬着头皮做了以下事情:
- 创建一个本地帐户(在我的实例中为 AutomatedOffice)并将此帐户下的 DCOM 配置设置为 运行 Excel
- 使用上述帐户登录并更改 Excel 设置以将应用程序根目录中的文件夹添加到受信任的位置并禁用保护模式消息
- 允许"Network Service"在本地调用 DCOM 进程(通过服务器 DCOM 配置而不是 CLSID 配置)
- 在 C:\Windows[System32|SYSWOW64]\config\systemprofile\Desktop paths 上为此帐户添加 NTFS 权限
奇怪的是,在创建帐户后我得到了以下异常 Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied.
,通过将 HOST\Users
和 HOST\NetworkServices
组添加到 DCOM 安全(仅限本地!!! ) 设置。
您需要在信任中心添加您的网站发布文件夹的安全位置,例如,如果您的网站从 c:\temporal\ 读取文件,您必须添加 excel,安全位置文件夹名称