windows - Explorer passerer det fulde eksekverbare stinavn i kommandolinjens argumenter

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har oprettet et nyt Win32-konsolprogram . Det har dette hovedindgangspunkt:


int APIENTRY wWinMain(\_In\_ HINSTANCE hInstance, \_In\_opt\_ HINSTANCE hPrevInstance, \_In\_ LPWSTR lpCmdLine, \_In\_ int nCmdShow)


Jeg analyserer parametre i lpCmdLine:


LPWSTR *szArglist;
int nArgs;
szArglist = CommandLineToArgvW(lpCmdLine, &nArgs);
if (nArgs >= 1 && wcslen(szArglist[0]) > 0)
    productName = szArglist[0];
if (nArgs >= 2 && wcslen(szArglist[1]) > 0 && PathFileExists(szArglist[1]))
    installPath = szArglist[1];


Jeg vil analysere den første parameter som productName og den anden parameter som installPath. Men hvis jeg starter dette program fra explorer, sætter det den første parameter som den fulde sti til den eksekverbare.


Er der nogen måde at håndtere denne adfærd på? Under hvilke situationer overfører Windows argumenter til min ansøgning? Hvordan kan jeg ignorere disse og få min ansøgning til at acceptere kommandolinjeparamenter som følger:


application.exe "Product Name" "C:Program FilesProduct Name"

Bedste reference


Det lader til, at jeg bare skal ændre min tilgang ved at analysere for navngivne argumenter:


LPWSTR *szArglist;
int nArgs;
szArglist = CommandLineToArgvW(lpCmdLine, &nArgs);
BOOL skipNext = false;
for (int i = 0; i < nArgs; i++) {
    if (skipNext) {
        skipNext = false;
        continue;
    }
    if (wcscmp(szArglist[i], L"/path") == 0 && i + 1 < nArgs && wcslen(szArglist[i + 1]) > 0 && PathFileExists(szArglist[i + 1])) {
        installPath = szArglist[i + 1];
        skipNext = true;
    }
    if (wcscmp(szArglist[i], L"/product") == 0 && i + 1 < nArgs && wcslen(szArglist[i + 1]) > 0) {
        productName = szArglist[i + 1];
        skipNext = true;
    }
}