为什么我的应用程序在通过ShellExecute调用Excel 2016文件时崩溃了?

时间:2015-10-22 15:36:45

标签: c++ winapi windows-shell excel-2016

为什么我的应用程序在通过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文件。
  • 使用ClickToRun安装Excel(我认为这是唯一可以安装的方式)

来自事件查看器:

<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>

0 个答案:

没有答案