0

为什么我的应用程序在通过 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>
4

0 回答 0