问题描述
我正在开发一个调用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) 将修改将启动vbscript并传递excel文件的CreateProcess触发器bat文件。
一旦method1()结束,他们将再次在method2()中调用CreateProcess()以打开相同的excel文件。
method2()
{
BOOL bResult = ::CreateProcess(
NULL,// LPTSTR
NULL,// LPSTARTUPINFO lpsiStartInfo
&stProcInfo // LPPROCESS_informatION lppiProcInfo
);
}
此处的wctAppPath为(excelInstallationPath \ EXCEL.exe folderPath \ excelFile.xls)
所有主要功能结束后,所需的修改后的excel将存储在Documents文件夹中,而不是实际的给定路径中。实际给出的excel根本不会被修改。
我已经评论了method2并尝试了。预期的excel将出现在给定的路径中。
解决方法
旧应用程序是 CATIA。 在 V5 中,CATScriptUtilities::ExecuteScript 用于调用 catvba。 在 V6 中,我们可以使用相同的 API 来调用 catvba。它工作正常。 不需要调用 .bat->.vba->.catvba