都是通过strCommand = _T(RUN_UTILITY_INSTALL_SPREAD_OPERATE_CMD); Unitil通过命令行来实现的 通过EXE条用命令行
void CRunInstallSoftInfo::DoRunInstallSoftInfo(HINSTANCE hInstance, BOOL bInstallSilent, const TCHAR *lpszInstallPath)
{
// 删除其它目录文件
xstring strLastInstallPath = CConfigureInstance::Instance().GetInstallPath();
xstring strCurInstallPath = lpszInstallPath;
xstring strTempLastInstallPath = strLastInstallPath;
xstring strTempCurInstallPath = strCurInstallPath;
CStringUtil::ToLowerXString(strTempLastInstallPath);
CStringUtil::ToLowerXString(strTempCurInstallPath);
if (strTempLastInstallPath != strTempCurInstallPath)
{
PathUtil::UnDeleteDirectory(strLastInstallPath.c_str());
}
// 或取父进程信息
GetParentProcessInfo();
TCHAR sz7zTempFile[MAX_PATH] = {'\0'};
//
GetTempPath(MAX_PATH, sz7zTempFile);
//
PathUtil::CreateDirectoryPath(sz7zTempFile);
//
HRSRC hRes = FindResource(hInstance, _T("MyPDF"), _T("DATA"));
if (hRes == NULL)
{
return;
}
HGLOBAL hData = LoadResource(hInstance, hRes);
LPVOID lpData = LockResource(hData);
DWORD dwSize = SizeofResource(hInstance, hRes);
int nRand = RandUtil::GetRand(10000, 99999);
xstring strRand = IntUtil::IntToString(nRand);
_tcscat(sz7zTempFile, SOFT_FILE_NAME);
_tcscat(sz7zTempFile, _T("-"));
_tcscat(sz7zTempFile, strRand.c_str());
_tcscat(sz7zTempFile, _T(".7z"));
if (::PathFileExists(sz7zTempFile))
{
FileUtil::DeleteFileOfRemoveTempRebotDelete(sz7zTempFile);
}
LPBYTE lpBuffer = (LPBYTE)lpData;
HANDLE hFile = ::CreateFile
(
sz7zTempFile,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwWriteSize = 0;
::WriteFile(hFile, lpData, dwSize ,&dwWriteSize, NULL) ;
::CloseHandle(hFile);
}
CHAR szTempFile[MAX_PATH] = {'\0'};
CStringUtil::TCHARToCHAR(sz7zTempFile, szTempFile);
//
CConfigureInstance::Instance().SaveChooseInstallPath();
CConfigureInstance::Instance().CalcSoftMD5();
//
//
BOOL bRunCompress = FALSE;
BOOL bRunMoniter = FALSE;
BOOL bCanInstallService = TRUE;
BOOL bCreateStartMenu = FALSE;
int nPercentage = 0;
if (!bRunCompress)
{
DoRunCompress(strCurInstallPath.c_str(), szTempFile, Extract_Callback, &nPercentage);
}
xstring strRunExe = _T("");
xstring strCommand = _T("");
xstring strRunParam = _T("");
xstring strToolExe = lpszInstallPath;
xstring strMutualExe = lpszInstallPath;
//
strToolExe += TOOL_EXE_NAME;
strMutualExe += MUTUAL_EXE_NAME;
//
const TCHAR *lpszOldSpreader = CConfigureInstance::Instance().GetOldSpreader();
const TCHAR *lpszNewSpreader = CConfigureInstance::Instance().GetNewSpreader();
xstring strNewSpareder = lpszNewSpreader;
if (strNewSpareder.find(_T("xt")) != xstring::npos)
{
bRunMoniter = TRUE;
}
if (CConfigureInstance::Instance().GetCreateStartMenu())
{
bCreateStartMenu = TRUE;
}
if (CConfigureInstance::Instance().GetCanInstallService())
{
bCanInstallService = TRUE;
}
else
{
bCanInstallService = FALSE;
}
if (bInstallSilent)
{
bCanInstallService = TRUE;
}
strCommand = _T(RUN_UTILITY_INSTALL_SPREAD_OPERATE_CMD);
if (_tcslen(lpszOldSpreader) > 0)
{
strRunParam = _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(OLD_CLIENT_ID_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += lpszOldSpreader;
strRunParam += _T(" ");
strRunParam += _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(NEW_CLIENT_ID_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += lpszNewSpreader;
}
else
{
strRunParam += _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(NEW_CLIENT_ID_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += lpszNewSpreader;
}
if (bRunMoniter)
{
strRunParam += _T(" ");
strRunParam += _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(INSTALL_MONITER_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += _T("true");
}
if (!bCanInstallService)
{
strRunParam += _T(" ");
strRunParam += _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(INSTALL_SERVICE_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += _T("false");
}
if (!bCreateStartMenu)
{
strRunParam += _T(" ");
strRunParam += _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(INSTALL_START_MENU_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += _T("false");
}
if (!bInstallSilent)
{
strRunParam += _T(" ");
strRunParam += _T(RUN_CMD_SPLIT_VALUE);
strRunParam += _T(INSTALL_SILENT_PARAM_NAME);
strRunParam += _T(RUN_CMD_SPACE_VALUE);
strRunParam += _T("false");
}
strRunExe = _T("\"");
strRunExe += strMutualExe;
strRunExe += _T("\" ");
strRunExe += strCommand;
strRunExe += _T(" ");
strRunExe += strRunParam;
ProcessUtil::CreateUIProcess(strRunExe.c_str(), true, 10 * 1000);
nPercentage += (100 - nPercentage) / 3;
Extract_Callback(nPercentage, 100);
nPercentage += (100 - nPercentage) / 3;
Extract_Callback(nPercentage, 100);
//
::DeleteFile(sz7zTempFile);
//
Extract_Callback(100, 100);