ShellExecute + *.eml

0

Witam

Mam pytanie. W programiku używam ShellExecute do otwierania plików przechowywanych w bazie. Wszystko było OK, aż tu dzisiaj próbuje kliknąć na załączniku w postaci pliku *.eml i zonk - nic. Uruchamia się proces Outlook Express (msimn.exe) i wisi, obciąża CPU w 90% i nic. Dwukrotne kliknięcie spod Explolera otwiera normalnie okno wiadomości w Outlook'u, a przez ShellExecute nie idzie. Po dwukrotnym kliknięciu na pliku, nie trzeba nic wybierać, wpisywać żadnego hasła ani nic.
Kodzik wygląda tak:

var wynik : integer;
begin
  wynik := ShellExecute(Application.Handle, 'open', pchar(NazwaDokumentu),'' ,'', SW_SHOWDEFAULT);
  If Wynik=SE_ERR_NOASSOC then 
    ShowMessage('Nie ma żadnego programu skojarzonego z takim typem pliku!');
  else
    If wynik<=32 then 
      ShowMessage('Próba otwarcia pliku zakończyła się niepowodzeniem!');

Wynik ustawia się na 42, w helpie pisze że poniżej 32 jest problem, inaczej to uchwyt do programu który się odpalił.

Nie wiem co jest grane. Restartowałem kompa, próbowałem inne załączniki typu eml - też lipa. Załączniki w tylu doc, xls, txt otwierają się bez problemu. Cała procedura działała, i nic przy niej nie było zmieniane : ( W konfiguracji OE też nic nie grzebałem. Nazwa pliku ma około 90 znaków i oczywiście ma rozszerzenie 'eml'. Po ubiciu wszystkich procesów 'msimn.exe' i ponownie wywołaniu funkcji to samo.
Jedyne co pomaga, to jak jest uruchomiony normalnie Outlook Express to się wtedy otwiera tak jak trzeba przez ShellExecute.

Ma ktoś jakieś pomysły, bo mi już brakło : ( ?

Chyba żeby sprawdzać czy to jest eml i odpalać jakoś otulook'a z parametrem ... no nie wiem

// dopisane
Podanie jako lpDirectory PChar(ExtractFilePath(NazwaDokumentu)) też nic nie pomogło : (

// dopisane
If lpFile specifies a document file, nShowCmd should be zero. <= to też nie pomaga

0

Być może to nic nie da i to może tylko szczegół, ale ja używam SW_SHOWNORMAL

0

Niestety to samo.

0

Kolejne podejście do tematu.

Ostatnio trafiłem na kolejny dziwny przypadek przy otwieraniu plików, tym razem pdf. Siedzi sobie w bazie pdf i jak go chce odpalić przez ShellExecute to wyskakuje że Acrobat Reader wykonał nieprawidłową operację. A jak dokument otwieram przed explorer'a to wszystko ok. Jak pisałem wyżej poprzednio próbowałem już niemal wszystkiego, ale ostatnio przyszedł mi do głowy jeszcze jeden pomysł:

program gs;

uses  Forms,  SysUtils,  ShellApi;

{$R *.RES}

begin
  Application.Initialize;
  Application.Run;
  If (ParamCount = 1) and FileExists(ParamStr(1)) then
    ShellExecute(0, 'open', PChar(ParamStr(1)), nil, nil, 0);
end.

Prosty program (to jest cały kod). Jeśli przekaże mu się parametr to próbuje odpalić jeśli taki plik istnieje. Jeśli z lini poleceń wpiszę

gs.exe "tutaj_nazwa_pliku_pdf"

to się wszystko ładnie odpala. No i teraz odpalanie dokumentów w moim programiku zmieniłem z:

ShellExecute(Application.Handle, 'open', PChar(NazwaDokumentu), nil , nil , SW_SHOWNORMAL);

na

ShellExecute(Application.Handle, nil, PChar(ExtractFilePath(Application.Exename) + 'gs.exe'), PChar(NazwaDokumentu) , nil , SW_HIDE);

I co ? DALEJ LIPA !!!

Ja już nie mam pomysłów. Wygląda na to że główna aplikacja w "jakiś" sposób oddziaływuje nawet na tego odpalanego exe'ca, bo tak samo wyskakuje że Adobe Acrobat wykonał nieprawidłową operację. Oczywiscie w nazwie przekazywanej do gs.exe nie ma spacji, zresztą jak są to je opakowywuje w cudzysłowy.

Ma ktoś jakiś pomysł ?

Aha rzecz dotyczy głównie mojego kompa : ( Na innych to bywa różnie, ale generalnie hula, nie mniej jednak mam sygnały od klientów że taka sytuacja czasem ma miejsce.

0

A jakbyś skrócił nazwę do 8 znaków?
Tzn generalnie - może w ścieżce/nazwie masz spacje etc?

0
TheBigStaticObject napisał(a)

A jakbyś skrócił nazwę do 8 znaków?
Tzn generalnie - może w ścieżce/nazwie masz spacje etc?

Zmiana nazwy do 8 znaków nic nie dała. W tym felernym przypadku nie mam spacji w nazwie/ścieżce.

0

a jakby uruchamiać jakoś bardziej naokoło? poprzez skrót .. czy plik bat?

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