我正在运行一些命令行脚本来使用AxCrypt软件加密文件。
我的代码编译并运行正常,但是当我之后检查文件时,它还没有加密。
以下是代码:
LPCWSTR loc = L"C:\\\\Axantum\\\\AxCrypt\\\\AxCrypt";
STARTUPINFOW si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (CreateProcessW(loc, const_cast<LPWSTR>(master), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
主变量包含命令,loc包含AxCrypt程序的位置。
LPCWSTR axLocation = L" C:\\\\Axantum\\\\AxCrypt\\\\AxCrypt ";
LPCWSTR flags = L" -b 2 -e -k ";
LPCWSTR passcode = L" \"***************\" ";
LPCWSTR command = L" -z ";
LPCWSTR imagelocation = L"%pathName";
std::wstring mast = std::wstring(axLocation) + flags + passcode + command + imagelocation;
LPCWSTR master = mast.c_str();
答案 0 :(得分:0)
LPCWSTR loc = L"C:\\\\Axantum\\\\AxCrypt\\\\AxCrypt";
这是错误的。你的文字中有太多的斜杠。它需要是这样的:
LPCWSTR loc = L"C:\\Axantum\\AxCrypt\\AxCrypt";
与axLocation
相同。
此外,您的各种子字符串中都有不必要的空格。最后,您将从解释器的角度创建此master
命令行:
C:\\Axantum\\AxCrypt\\AxCrypt -b 2 -e -k "***************" -z %pathName
当看起来应该更像这样:
C:\Axantum\AxCrypt\AxCrypt -b 2 -e -k "***************" -z %pathName
尝试更像这样的东西:
LPCWSTR axLocation = L"C:\\Axantum\\AxCrypt\\AxCrypt";
LPCWSTR flags = L"-b 2 -e -k";
LPCWSTR passcode = L"***************";
LPCWSTR command = L"-z";
LPCWSTR imagelocation = L"%pathName";
WCHAR master[STRSAFE_MAX_CCH];
StringCchPrintfW(master, STRSAFE_MAX_CCH, L"\"%s\" %s \"%s\" %s %s", axLocation, flags, passcode, command, imagelocation);
STARTUPINFOW si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (CreateProcessW(axLocation, master, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
最后,%pathname
看起来很可疑。是应该像那样指定吗?或者它应该是一个环境变量呢?如果是后者,则缺少百分号:
%pathname%
CreateProcess()
不解释环境变量,所以如果你需要传递这样一个变量,那么你必须要么:
在致电ExpandEnvironmentStrings()
之前使用CreateProcess()
自行解决变量。
让CreateProcess()
启动cmd.exe /C
并让它为您解释环境变量,例如:
StringCchPrintfW(master, STRSAFE_MAX_CCH, L"cmd /C \"%s\" %s \"%s\" %s %s", axLocation, flags, passcode, command, imagelocation);