//--------------------------------------------------------------------------- #include #include #include "UpgradeThread.h" #include "UpgradeUnit.h" #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("UpgradeUnit.cpp", UpgradeForm); //--------------------------------------------------------------------------- String MAIN_APP_NAME; BOOL ImprovePrivilege() { HANDLE token; //提升权限 if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token)){ MessageBox(NULL,L"打开进程令牌失败...",L"错误",MB_ICONSTOP); return FALSE; } BOOL bRet = true; TOKEN_PRIVILEGES tkp; tkp.PrivilegeCount = 1; LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid); tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL)){ MessageBox(NULL,L"调整令牌权限失败...",L"错误",MB_ICONSTOP); bRet = FALSE; } CloseHandle(token); return bRet; } int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { int mode = 0, sid = 0; String sVar; if( ParamStr(1).IsEmpty() ){ return 0; } else{ String param = ParamStr(1).UpperCase(); if( param=="MD5" ){ mode = 1; } else if( ParamStr(2).IsEmpty() ){ return 0; } else{ if( param=="SHOW" ) mode = 0; else if( param=="HIDE" ) mode = 2; else if( param=="MOVE" ) mode = 3; MAIN_APP_NAME = ParamStr(2); sid = ParamStr(3).ToInt(); sVar = ParamStr(4); #ifdef _DEBUG // String msg = ParamStr(0) + " "; // msg += ParamStr(1) + " "; // msg += ParamStr(2) + " "; // msg += ParamStr(3); // ShowMessage( msg ); #endif } } try{ Application->Initialize(); Application->Title = APPNAME; ImprovePrivilege(); if( mode < 2 ){ Application->MainFormOnTaskBar = true; Application->CreateForm(__classid(TUpgradeForm), &UpgradeForm); UpgradeForm->m_iMode = mode; UpgradeForm->m_idSoft = sid; UpgradeForm->m_sVar = sVar; Application->Run(); } else{ TUpgradeThread* pThread = new TUpgradeThread( true, mode, sid, sVar ); pThread->Start(); pThread->WaitFor(); delete pThread; } } catch (Exception &exception){ Application->ShowException(&exception); } catch (...){ try{ throw Exception(""); } catch (Exception &exception){ Application->ShowException(&exception); } } return 0; } //---------------------------------------------------------------------------