Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
1

Некорректное обновление программы на клиентской рабочей станции

21.07.2016, 05:25. Показов 657. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята очень нужна Ваша помощь!
Разрабатываю программу обновления ПО.

На компьютере где я ее запускаю у пользователя отсутствуют права админа, поэтому я запускаю ее от привилегированной УЗ.
"Загвостка" в том, что так она всё прорабатывает.

Код:
.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TMemo *newver;
    TMemo *locver;
    TMemo *Progress;
    TTimer *Timer1;
    TLabel *Label1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall Timer1Timer(TObject *Sender);
    void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
//копирование 
int MoveFiles( String slSourceDir, String slTargetDir, bool toCopy = true )
{
    SHFILEOPSTRUCT sh;
    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_FILESONLY;
    sh.wFunc = toCopy ? FO_COPY : FO_MOVE;
    sh.pFrom = slSourceDir.c_str();
    sh.pTo = slTargetDir.c_str();
    sh.hNameMappings = NULL;
    sh.lpszProgressTitle = NULL;
    return SHFileOperation ( &sh );
}
#endif
.срр
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(DirectoryExists("\\\\Programs\\Catalog"))
{
    //копирование папки "Catalog" с заменой файлов (функцию "MoveFiles" смотри в H-файле)
    String chto = "\\\\Programs\\Catalog",
       kuda = "C:\\Program Files\\Client";
    if(!MoveFiles(chto, kuda)) //пока не скопируется файл обновления не запускаем
    {
        //запуск файла "install.BAT" распаковка доп.файлов
        SHELLEXECUTEINFO ShExecInfo = {0};
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = NULL;
        ShExecInfo.lpFile = L"C:\\ProgramFiles\\Client\\Catalog\\Bin\\install.bat";
        ShExecInfo.lpParameters = L"";//тихая установка
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_SHOW;
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo);
        WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
        Progress->Lines->Add("ПО успешно обновлено...");
    }
}
НО если я запускаю ее удаленно, то он она запустится повисит-повисит и закроется
Код на запуск обновления через cmd.exe:
C:\psexec.exe \\name_comp -u домен\УЗ -p Пароль C:\программа обновления

Антивирус, брандмауэр, UAC отключены!!!

Скажите, что не так???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2016, 05:25
Ответы с готовыми решениями:

не получается реализовать автоматическое обновление клиентской части программы
может кто нибудь создавал обновление свойх проектов, через FTP или с помошью других компонентов?...

Настройка клиентской станции на ubuntu
Всем доброго времени суток. Пишу свою первую тему. К сути, в университете, на занятиях по учебной...

Сборка рабочей станции
Здравствуйте, решил я собрать пк для работы с Solid и 3d max, бюджет 45-50т.р., прошу оценить и по...

Имя рабочей станции
Подскажите как можно получить имя рабочей станции?

15
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
21.07.2016, 11:06 2
Цитата Сообщение от Within_t Посмотреть сообщение
что не так?

Цитата Сообщение от Within_t Посмотреть сообщение
kuda = "C:\\Program Files\\Client";
-
Цитата Сообщение от Within_t Посмотреть сообщение
ShExecInfo.lpFile = L"C:\\ProgramFiles\\Client\\Catalog
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
21.07.2016, 11:48  [ТС] 3
Ну во - первых это куда копируются файлы
Цитата Сообщение от nick42 Посмотреть сообщение
Сообщение от Within_t
kuda = "C:\\Program Files\\Client";
А во - вторых это каталог в котором находится bat-файл, который запускается после того как все скопируется
Цитата Сообщение от nick42 Посмотреть сообщение
Сообщение от Within_t
ShExecInfo.lpFile = L"C:\\ProgramFiles\\Client\\Catalog
ЕЩЕ ВОПРОСЫ???
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32989 / 21295 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.07.2016, 12:02 4
Within_t, в любом случае:
1) при наличии пробелов в пути, сам путь нужно оборачивать в кавычки.
2) pFrom/pTo:
This string must be double-null terminated.
, у тебя я не вижу, где после строки гарантируется наличие двух нулевых символов.
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
21.07.2016, 12:16  [ТС] 5
volvo, ну у меня и так вроде все в кавычках.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32989 / 21295 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.07.2016, 12:20 6
Где кавычки? Эти кавычки - это синтаксис С++, ты должен заключать строковые литералы в кавычки. Попробуй вывести содержимое строки kuda через ShowMessage, и посмотри, остались ли в самой строке эти кавычки...
0
Модератор
9626 / 6230 / 2426
Регистрация: 21.01.2014
Сообщений: 26,583
Записей в блоге: 3
21.07.2016, 12:33 7
Цитата Сообщение от nick42 Посмотреть сообщение
ShExecInfo.lpFile = L"C:\\ProgramFiles\\Client\\Catalog
А так и надо, что ProgramFiles - без пробела?
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
21.07.2016, 12:36  [ТС] 8
Вы имеете ввиду что-то типа?
C++
1
2
    String a = ""\\\\Programs\\Catalog"";
    ShowMessage(a);
На выходе:
"\\Programs\\Catalog"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32989 / 21295 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.07.2016, 12:37 9
Да, только кавычки нужно экранировать. И не надо это делать везде, достаточно - только там, где есть пробелы в пути.
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
21.07.2016, 13:15 10
Цитата Сообщение от Within_t Посмотреть сообщение
ЕЩЕ ВОПРОСЫ???
Так вопросы - у вас. Только уважаемый D1973 понял правильно, что я имел в виду. Продолжайте спрашивать.
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
21.07.2016, 13:21  [ТС] 11
Цитата Сообщение от volvo Посмотреть сообщение
Да, только кавычки нужно экранировать.
Сделал так (на выходе):
chto="\\prog\123"
kuda="C:\Programs File (x86)"
и перед
C++
1
if(!MoveFiles(chto, kuda))
Программа сразу вылетает(
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32989 / 21295 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.07.2016, 13:24 12
Продолжай спрашивать. Продолжай. Я задал не один, а ДВА вопроса. Ответ на первый ты соизволил дать, второй - вообще проигнорировал. Продолжай спрашивать...
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
21.07.2016, 13:27  [ТС] 13
nick42, мне казалось, что я корректно описал проблему, а если Вы про это "ProgramFiles", то наверное описался))), за что извиняюсь.
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
21.07.2016, 13:33 14
Конечно, я только про опечатку, и не нужно извиняться. То, что это опечатка, следует из того хотя бы, что не работает только при запуске удалённо.
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
21.07.2016, 13:36  [ТС] 15
nick42, нет в программе все корректно. если ее запускаешь на компе она отрабатывает а если удаленно через psexec, то она доходит до копирования и вылетает)))
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
21.07.2016, 13:37 16
П.С. А при операциях с файлами и каталогами по сети появляются свои особые нюансы... - так, украинская буква i в названиях не передается правильно при копировании из удаленного узла, а при копировании на удаленный узел уже все нормально (насколько помню; для ХР).
1
21.07.2016, 13:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2016, 13:37
Помогаю со студенческими работами здесь

LVM на рабочей станции
Добрый, есть рабочая станция без LVM планируется установить два жестких новых и перенести папку...

Номер рабочей станции
Как узнать номер рабочей станции? Не как не пойму где эта инфа.

Хостинг на домашней рабочей станции
Доброго времени! я не уверен, в ту ли ветку написал сообщение, но все же продолжу, поправьте если...

Медленный рендер на рабочей станции
Доброго времени суток, ребята! Нужна ваша помощь в плане использования рабочей станции DELL....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru