Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ShellExecute, проблема на ровном месте, не открывается pdf файл 
V
    Опции темы
Albor
Дата 10.4.2009, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Вот так запускаю просмотр документа, но не работает на моей машине. Ставлю своё приложение на другой комп - всё работает.
Код

HINSTANCE hin=    ShellExecute(0,_T("open"),_T("file.pdf"),0,0,SW_SHOW );

Причину я выяснил, но озадачен: ShellExecute возвращает SE_ERR_NOASSOC, то есть "There is no application associated with the given file name extension", хотя Acrobat Reader установлен и зарегистрирован в системе и если просто кликнуть по pdf-файлу, то всё стартует как надо. Приложение, вызывающее эту функцию, написано с использованием MFC, но это, видимо, не важно. В чём может быть дело? Попутно возникли мысли: как проверить установлена ли в системе нужная программа, определить путь к ней и в конце-концов попытаться запустить с использованием командной строки. Собственно, интересует выделенное.
PM MAIL ICQ   Вверх
Andrey44
Дата 10.4.2009, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Я думаю что это надо в реестре ковырять


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
BorisVorontsov
Дата 10.4.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



Цитата(Albor @  10.4.2009,  06:56 Найти цитируемый пост)
В чём может быть дело?


В том, что действие Open определено некорректно, или вообще не определено


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Albor
Дата 10.4.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(BorisVorontsov @  10.4.2009,  08:43 Найти цитируемый пост)
В том, что действие Open определено некорректно, или вообще не определено

Простите, не понял. Я как-то могу определить это действие?
PM MAIL ICQ   Вверх
BorisVorontsov
Дата 10.4.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



Конечно, ручками в реестре поправь параметры действия Open. Либо вызывай ShellExecute с другим действием, которое использует проводник


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Albor
Дата 10.4.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



То есть, если я правильно понял, то такая ситуация - это частный случай отдельной системы и его повторение у других пользователей маловероятно? 
Цитата(BorisVorontsov @  10.4.2009,  09:18 Найти цитируемый пост)
Либо вызывай ShellExecute с другим действием, которое использует проводник 

Это как раз отпадает, так как мне нужно открыть определённый документ по определённому действию пользователя, а если предложить ему выбирать из списка, то он может открыть что-то не по теме.

PM MAIL ICQ   Вверх
BorisVorontsov
Дата 10.4.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



Цитата(Albor @  10.4.2009,  10:54 Найти цитируемый пост)
такая ситуация - это частный случай отдельной системы


Это частный случай отдельной системы с отдельной программой.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.