Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с shellexecute 
:(
    Опции темы
CodeMonkey
Дата 6.11.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



А нафига службе сетевой диск? Копируйте прямо по сетевому пути.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
m1nder
Дата 6.11.2009, 05:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.9.2009
Где: Нижний Новгород

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



На сервере, где будет крутиться служба смонтирован сетевой диск и на него собственно нужно скопировать. Вы не подскажете как грамотно скопировать по сети? Пробовал через CopyFile, прописывал локальный 127.0.0.1 - работает или, но если удаленный - не работает! 
PM MAIL WWW ICQ   Вверх
Akella
  Дата 6.11.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



А почему копируешь именно через командную строку? Копируй "своими силами". Есть же функции и процедуры из модуля WinApi и других модулей.

Добавлено через 6 минут и 26 секунд
я вот так запускаю архивацию rar`ом через командную строку, всё работает, смотри отличия

Код

function TfmMain.ExecAndWait(const FileName, Params: ShortString; ArcDir:string;
                               const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    wShowWindow := WinState;
  end;
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ArcDir),StartInfo,ProcInfo);
  { Ожидаем завершения приложения }
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;



Код

//fmMain.sWinrar - полный путь с именем файла к винрару
//sArcName - имя нового архива
//Dir+SearchRec.name - текущий каталог
//sPhotoToUpload - путь, куда сохранять архив

       fmMain.ExecAndWait(fmMain.sWinrar,
                          'M -m5 -ep -ed "'+sArcName+ '" "'+Dir+SearchRec.name+'"', sPhotoToUpload,
                          0);



Добавлено через 7 минут и 10 секунд
Но у меня не служба. И я не знаю, используют ли пользователи сетевые пути/диски.
PM MAIL   Вверх
CodeMonkey
Дата 6.11.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(m1nder @  6.11.2009,  05:11 Найти цитируемый пост)
смонтирован сетевой диск и на него собственно нужно скопировать

Ну так копируйте на путь, с которого смонтирован диск!

Т.е. если Q: смонтирован с \\server-1\Data\Share, то вместо копирования в Q:\, копируйте в \\server-1\Data\Share\ В чём проблема? Логин/пароль нужен или что?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
m1nder
Дата 6.11.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.9.2009
Где: Нижний Новгород

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



to Akella: как раз из-за службы у меня и не получается! Но твой вариант я еще не пробовал, попробую. 
Цитата

копируйте в \\server-1\Data\Share\

не копирует(пробовал через CopyFile)! правда логин и пароль не указывал при копировании, но я монтировал сетевой диск с логином и паролем, потом только копировал, в чем тогда отличия от прямого копирования? Буду еще по всякому пробовать! 
Всем огромное спасибо!
PM MAIL WWW ICQ   Вверх
Akella
Дата 8.11.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Поле каких либо операций типа CopyFile можно использовать такой код для получения текста ошибки:
Код

if GetLastError > 0 then
  ShowMessage(SysErrorMessage(GetLastError));//показываем текст ошибки, которую вернула ОС

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(m1nder @  6.11.2009,  23:53 Найти цитируемый пост)
правда логин и пароль не указывал при копировании, но я монтировал сетевой диск с логином и паролем

И как вы полагаете, это будет работать?

Используйте тогда WNetAddConnection2.

Цитата(Akella @  8.11.2009,  11:01 Найти цитируемый пост)
ShowMessage

В службе? smile

Добавлено через 10 минут и 30 секунд
Цитата(CodeMonkey @  8.11.2009,  13:27 Найти цитируемый пост)
Используйте тогда WNetAddConnection2

Предупреждая дальнейшие вопросы: Do Googling.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
sCreator
Дата 9.11.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.8.2009
Где: Московская област ь

Репутация: 2
Всего: 5



А от кого запущена служба?

Приличное время назад сталкивался с аналогичной проблемой, только наоборот, копировал из локальной сети на комп.
В результате, если правильно помню, выяснилось, что сервисы запускаемые с системной учетной записью (System), не имеют доступа к сетевым ресурсам.
Запуск сервиса с учетной записью администратора, прописаннного в сетевой политике решил проблему.
Копировал встроенными функциями.

Попробуйте через оснастку "Службы" запустить например под своим логином ( если в командной строке работает копирование)
PM   Вверх
CodeMonkey
Дата 10.11.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(sCreator @  9.11.2009,  22:34 Найти цитируемый пост)
сервисы запускаемые с системной учетной записью (System), не имеют доступа к сетевым ресурсам

Для этого есть специальная учётка NT AUTHORITY\NetworkService (Сетевые службы).


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 10.11.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(CodeMonkey @  8.11.2009,  13:27 Найти цитируемый пост)
Цитата(Akella @  8.11.2009,  11:01 Найти цитируемый пост)
ShowMessage

В службе? smile

А если немного головой  подумать, то можно сохранять в файл, правда?
PM MAIL   Вверх
sCreator
Дата 16.11.2009, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.8.2009
Где: Московская област ь

Репутация: 2
Всего: 5



Цитата(Akella @ 10.11.2009,  22:09)
Цитата(CodeMonkey @  8.11.2009,  13:27 Найти цитируемый пост)
Цитата(Akella @  8.11.2009,  11:01 Найти цитируемый пост)
ShowMessage

В службе? smile

А если немного головой  подумать, то можно сохранять в файл, правда?

Еще есть журнал событий, в который пишут все службы о своих удачах и ошибках
PM   Вверх
Akella
Дата 16.11.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Да, и можно ещё создать свой журнал.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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