Example #1
0
//
// LSExecuteEx
//
HINSTANCE LSExecuteEx(HWND hOwner, LPCSTR pszOperation, LPCSTR pszCommand, LPCSTR pszArgs, LPCSTR pszDirectory, int nShowCmd)
{
    HINSTANCE hReturn = HINSTANCE(32);
    
    if (pszCommand != NULL)
    {
        if (pszCommand[0] == '!')
        {
            hReturn = ParseBangCommand(hOwner, pszCommand, pszArgs) ?
                HINSTANCE(33) : HINSTANCE(32);
        }
        else
        {
            TRACE("LSExecuteEx(%.8X, \"%s\", \"%s\", \"%s\", \"%s\", %d);",
                hOwner, pszOperation, pszCommand, pszArgs,pszDirectory,
                nShowCmd);
            
            if (PathIsDirectory(pszCommand))
            {
                hReturn = LSShellExecute(hOwner, pszOperation, pszCommand,
                    pszArgs, NULL, nShowCmd ? nShowCmd : SW_SHOWNORMAL);
            }
            else
            {
                SHELLEXECUTEINFO seiCommand = { 0 };
                seiCommand.cbSize = sizeof(SHELLEXECUTEINFO);
                seiCommand.hwnd = hOwner;
                seiCommand.lpVerb = pszOperation;
                seiCommand.lpFile = pszCommand;
                seiCommand.lpParameters = pszArgs;
                seiCommand.lpDirectory = pszDirectory;
                seiCommand.nShow = nShowCmd;
                seiCommand.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI;
                
                LSShellExecuteEx(&seiCommand);
                
                hReturn = seiCommand.hInstApp;
            }
        }
    }
    
    return hReturn;
}
Example #2
0
void StartupRunner::_RunRunOnceEx()
{
    //
    // TODO: Figure out how this works on Win64
    //
    TCHAR szArgs[MAX_PATH] = { 0 };
    UINT uChars = GetSystemDirectory(szArgs, MAX_PATH);
    
    if (uChars > 0 && uChars < MAX_PATH)
    {
        if (SUCCEEDED(StringCchCat(szArgs, MAX_PATH, _T("\\iernonce.dll"))))
        {
            // The file doesn't exist on NT4
            if (PathFileExists(szArgs) && SUCCEEDED(StringCchCat(szArgs,
                MAX_PATH, _T(",RunOnceExProcess"))))
            {
                LSShellExecute(NULL,
                    _T("open"), _T("rundll32.exe"), szArgs, NULL, SW_NORMAL);
            }
        }
    }
}