为什么我的应用程序在通过 ShellExecute 调用 Excel 2016 文件时会崩溃?
最小的例子:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
int nRetCode = (int)ShellExecute(NULL, NULL, _T("c:\\temp\\MyExcel.xlsx"), NULL, NULL, SW_SHOWNORMAL);
}
- 它只会在 Excel 2016 .xlsx 文件上崩溃。
- 相同的代码适用于 Excel 2013 .xlsx 文件(即仅安装了 Excel 2013)。
- 相同的代码适用于 Excel 2016 .xls 文件(安装了 Excel 2016)
- 当名称更改为 .xls 文件(安装了 Excel 2016)时,相同的代码适用于 Excel 2016 .xlsx 文件
- Excel 是使用 ClickToRun 安装的(我认为这是唯一可以安装的方法)
从事件查看器:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2015-10-22T15:22:13.000000000Z" />
<EventRecordID>3393</EventRecordID>
<Channel>Application</Channel>
<Computer>xxx.se</Computer>
<Security />
</System>
<EventData>
<Data>ShellExecuteTest.exe</Data>
<Data>0.0.0.0</Data>
<Data>5628ff16</Data>
<Data>msoshext.dll</Data>
<Data>16.0.4229.1029</Data>
<Data>56067af7</Data>
<Data>c0000005</Data>
<Data>00078e8c</Data>
<Data>e8c</Data>
<Data>01d10cdd6d71246d</Data>
<Data>C:\xxx\ShellExecuteTest.exe</Data>
<Data>C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\Office16\msoshext.dll</Data>
<Data>ab37d64c-78d0-11e5-8261-005056ae16e5</Data>
<Data>
</Data>
<Data>
</Data>
</EventData>
</Event>