【发布时间】: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