【问题标题】:CreateProcess windows API stores excel in Documents folderCreateProcess windows API将excel存储在Documents文件夹中
【发布时间】:2021-01-24 12:06:15
【问题描述】:

我正在开发一个调用 CreateProcess 方法的遗留应用程序

method1()
{
        BOOL bResult = ::CreateProcess(
        NULL,               // LPCTSTR    
        wctAppPath,         // LPTSTR      lpszCommandLine
        NULL,               // LPSECURITY_ATTRIBUTES lpsaProc
        NULL,               // LPSECURITY_ATTRIBUTES lpsaThread
        FALSE,              // BOOL                  fInheritHandles
        NULL,               // DWORD                 fdwCreate
        NULL,               // LPVOID                lpvEnvironment
        NULL,               // LPCTSTR               lpszCurDir
        &stStatusInfo,      // LPSTARTUPINFO         lpsiStartInfo
        &stProcInfo         // LPPROCESS_INFORMATION lppiProcInfo
    );
}

wctAppPath 值:(folderPath\test.bat ..\excel.xls) 此 CreateProcess 触发器 bat 文件将启动 vbscript 并通过 excel 文件进行修改。

一旦这个method1()结束,他们会在method2()中再次调用CreateProcess()来打开同一个excel文件。

method2()
{
  BOOL bResult = ::CreateProcess(
        NULL,               // LPCTSTR    
        wctAppPath,         // LPTSTR      
        NULL,               // LPSECURITY_ATTRIBUTES lpsaProc
        NULL,               // LPSECURITY_ATTRIBUTES lpsaThread
        FALSE,              // BOOL                  fInheritHandles
        NULL,               // DWORD                 fdwCreate
        NULL,               // LPVOID                lpvEnvironment
        NULL,               // LPCTSTR               lpszCurDir
        &stStatusInfo,      // LPSTARTUPINFO         lpsiStartInfo
        &stProcInfo         // LPPROCESS_INFORMATION lppiProcInfo
        );
}

这里wctAppPath是(excelInstallationPath\EXCEL.exe folderPath\excelFile.xls)

一旦所有主要功能结束,所需的修改后的 excel 将存储在 Documents 文件夹中,而不是实际给定的路径中。实际给定的excel根本没有修改。

我已经评论了method2并尝试了。预期的 excel 出现在给定的路径中。

【问题讨论】:

  • 为什么标记为 VBScript?
  • 无法保证 Excel 运行后会将其输出保存到与输入相同的文件中。用户可以告诉 Excel 将输出保存到他们想要的任何文件中。此外,您不能使用CreateProcess() 直接执行.bat 文件。使用ShellExecute/Ex() 代替。否则,请改用CreateProcess() 运行cmd.exe /C,将.bat 路径和输入值作为cmd.exe 的参数提供给它。

标签: c++ excel shell createprocess windows-api-code-pack


【解决方案1】:

旧版应用程序是 CATIA。 在 V5 中,CATScriptUtilities::ExecuteScript 用于调用 catvba。 在 V6 中,我们可以使用相同的 API 来调用 catvba。它工作正常。 无需调用.bat->.vba->.catvba

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多