Nemáte čirou náhodou někdo vyřešený následující problém?
Ve Windows je pod písmenkem X: namapovaný nějaký síťový disk (je celkem jedno, na jakém počítači, může to být i lokální, akorát mapované přes síťové cesty):
net use x: \\localhost\application
Na tomto disku je aplikace, řekněme aplikace.exe. Windows mají zabezpečené ve svém defaultním stavu, tzn. Internet Options pro zónu Intranet říkají, že se má automaticky zjišťovat intranetová síť. To vede k tomu, že když si v Exploreru otevřu X: a zkusím kliknutím spustit aplikace.exe, dostanu upozornění, že jde o neověřeného vydavatele a jestli opravdu chci aplikaci spustit.
Pokud se pokusím tuto aplikaci spustit pomocí ShellExecute, tak se potvrzující dialog vůbec nezobrazí, aplikace se nespustí a dostanu chybu SE_ERR_ACCESSDENIED. Ovšem když tutéž aplikaci spustím přes CreateProcess, tak všechno proběhne podle očekávání - potvrzující dialog nedostanu a aplikace se spustí. Pokud bych napřed v Možnostech internetu / Zabezpečení / Místní Intranet explicitně nastavil, že můj server patří do místního intranetu, tak zafunguje i ShellExecute.
Otázka zní: Dá se ShellExecute nebo ShellExecuteEx přimět k tomu, aby aplikaci spustil bez varování, bez SE_ERR_ACCESSDENIED a bez nastavování zóny Místní Intranet, podobně jako to dokáže CreateProcess? Když nebude zbytí, tak použiju CreateProcess, ale ShellExecute má tu obrovskou výhodu, že se dá použít i pro "spuštění" dokumentů (např. PDF soubor nebo obrázek) v defaultním prohlížeči pro ten který typ (a dokonce tomu ani nevadí to nastavení Místního Intranetu), a to bych chtěl zachovat. Musel bych testovat příponu souboru, jestli je některá ze spustitelných a potom použít CreateProcess, ale to se mi zdá jako dost velká prasárna (když to udělám jednoduše) nebo jako šílený opruz (když to budu dělat pořádně).