ShellExecute w win7

0

Witam,
Mam problem z ShellExcute na win 7, otóż nie mogę uruchomic żadnej aplikacji poprzez ShellExecute(), GetLastError() daje wynik 2.
WinExec() uruchamia program jednak potrzebował bym ShellExecute aby uruchomić np explorera windows z podanym katalogiem.

Ktoś napotkał taki problem lub moze coś poradzić?

0

a pokaz moze jeszcze kod gdzie wywolujesz shellexecute

0

ShellExecute(0, "open", "c:\program files (x86)\program.exe", 0, 0, SW_SHOW);

Dodam że z ciekawości sprawdziłem w Dev-cpp i działa więc wina musi leżec po stronie VisualStudio 2008... dobrze by było abym wiedział w czym tkwi problem bo musze do szkoły programować w VS i nie chce mieć problemów w późniejszym czasie.

0

http://msdn.microsoft.com/en-us/library/ms681382(v=vs.85).aspx
A dokładniej:
ERROR_FILE_NOT_FOUND
2 (0x2)
The system cannot find the file specified.

0

Nie, to nie to... nie ma żadnego błędu, ten sam kod działa po skompilowaniu w devcpp i programy sie uruchamiaja oraz explorer... po skompilowaniu w VS nie...

0

A uprawnienia do odczytu/wykonania masz?

0

Spróbowałeś pod różnymi HWND (pierwszy parametr) ?

0

Co do uprwanien to wątpie aby miały związek bo tak jak pisałem po kompilacji w devie ten sam kod działa poprawnie. Kompilacja oraz uruchomienie programu odbywa sie na koncie administratora (próbowałem także uruchamiać "jako" administrator). Nie próbowałem z innymi uchwytami.

0

Wyślij mi jeślibyś mógł 2 programy (zuploaduj, np. tutaj: http://www.2shared.com/) , jeden skompilowany w DevC++ a drugi w VS.
Wystarczy coś takiego:

int main()
{
    ShellExecute(0, "open", "C:\\Windows\\notepad.exe", 0, 0, SW_SHOW);
}

Nie chce mi się wierzyć żeby była jakaś różnica. W każdym razie zobaczę.

0

Trochę się spóźniłem...

No więc na początek cię zganię - wysłałeś mi wersję debug... Musiałem specjalnie zainstalować VS 2008 żeby w ogóle uruchomić aplikację (nevermind, i tak chciałem to zrobić, tak samo jak pracuje na VSC# 2008 - jakoś bardziej wolę tą wersję)

Ok, bardziej do rzeczy -> trochę mi to zajęło bo miałem napad ślepoty, ale w przypadku deva używasz wersji ASCII (ShellExecuteA) a w przypadku Vs, unicode (ShellExecuteW) - inaczej mówiąc, visual studio jako nowoczesny kompliator zmienia ShellExecute na ShellExecuteW, a dev na raczej przestarzałe ShellExecuteA.

Pierwszą rzeczą jaka mi wpada do głowy, to to że ze ścieżkami w wersjach unicode jest ten problem że wymagają prefiksu \?\ (po prostu dodania tego przed ścieżką) - nie wiem czy to rozwiązuje problem, ale jest na to szansa.

Możesz albo spróbować dodać to nieszczęsne \?, albo po prostu zmienić w ustawieniach kompilatora że chcesz używać wersji ASCII.

0

@msm, zawaliłeś. Spójrz na typ stringów. Do wywołania ShellExecuteW lecą stringi ansi, nie wide. Autor wątku proszony o używanie makra TEXT i nie rzutowanie stringów na siłę...

1 użytkowników online, w tym zalogowanych: 0, gości: 1