Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Thypson
21 / 21 / 19
Регистрация: 10.09.2013
Сообщений: 285
.NET 4.x

MoveFileEx или (Самозаменения программы)

10.11.2013, 23:09. Показов 1350. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть программа в которо прописан код на обновление программы..
Если есть новая версия он должен скачать новую..
Но мне нужно что-бы программа самозаменялась и запускалась!
Знаю что можно сделать через MoveFileEx, но как это сделать понять не могу...
Мой код:
Кликните здесь для просмотра всего текста
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
private void ver()
        {
            string inetver = "";
            HttpWebRequest rew = (HttpWebRequest)WebRequest.Create("https://www.cyberforum.ru/ver");
            HttpWebResponse resp = (HttpWebResponse) rew.GetResponse();
            Stream str = resp.GetResponseStream();
            using (StreamReader sr = new StreamReader(str, Encoding.UTF8))
            {
                inetver = sr.ReadLine();
            }
            if (inetver != vers)
            {
                DialogResult dialogResult =
                    MessageBox.Show(
                        "Новая версия программы. Обновить сейчас?", "Обновление", MessageBoxButtons.YesNo,
                        MessageBoxIcon.Warning);
                if (dialogResult == DialogResult.Yes)
                {
                    WebClient webClient = new WebClient();
                    webClient.DownloadFile("https://www.cyberforum.ru/prog.exe",
                        Path.GetFileNameWithoutExtension(Application.ExecutablePath) + ".exe");
                }
                else if (dialogResult == DialogResult.No)
                {
                    Environment.Exit(0);
                }
            }
        }


Код использования MoveFileEx на С++:
Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
BOOL WaitForReboot = FALSE;
 
  int type = (WaitForReboot) ? MOVEFILE_DELAY_UNTIL_REBOOT : MOVEFILE_COPY_ALLOWED;
 
  CHAR backupFile[MAX_PATH] ={0};
  CHAR exeFile[MAX_PATH] ={0};
  CHAR temppath[MAX_PATH] = {0};
 
  ::GetCurrentDirectoryA(255,backupFile);
  strcat(backupFile,"\\backup.bak");
 
  ::GetCurrentDirectoryA(255,exeFile);
  strcat(exeFile,"\\FrostLoader.exe");
 
  ::GetTempPath(MAX_PATH, temppath);
  strcat(temppath,"\\update.bat");
 
  ::DeleteFile(backupFile);
 
 
 
  if (!::MoveFileExA(exeFile, backupFile, type)) 
  {
   MessageBox::Show("Не удалось создать копию файла!\nПопробуйте скачать Launcher с FrostLoader.ru", 
    "Error", MessageBoxButtons::OK, 
    MessageBoxIcon::Error);
   return;
  }
 
 
  BOOL bMoveOK = (::MoveFileEx(temppath, exeFile, type) == TRUE);
  if (!bMoveOK)
  {
   MessageBox::Show("Не удалось по каким то причинам обновить файл!", 
    "Error", MessageBoxButtons::OK, 
    MessageBoxIcon::Error);
   
   
 
   return;
  }


Добавлено через 10 часов 38 минут
нашёл такое...но оно заменит только после перезапуска ОС
а мне надо после перезапуска программы!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Flags]
        internal enum MoveFileFlags
        {
            None = 0,
            ReplaceExisting = 1,
            CopyAllowed = 2,
            DelayUntilReboot = 4,
            WriteThrough = 8,
            CreateHardlink = 16,
            FailIfNotTrackable = 32,
        }
        internal static class NativeMethods
        {
            [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
            public static extern bool MoveFileEx(
                string lpExistingFileName,
                string lpNewFileName,
                MoveFileFlags dwFlags);
        }
.......................
                NativeMethods.MoveFileEx(Path.GetFileName(Application.ExecutablePath), newfile,
                    MoveFileFlags.ReplaceExisting);
Добавлено через 6 минут
http://msdn.microsoft.com/en-U... s.85).aspx
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2013, 23:09
Ответы с готовыми решениями:

MoveFileEx не перемещает файл
создаю программу, которая переместит файл C:\1.txt в C:\2.txt, но не выходит #include<Windows.h> #include<CommCtrl.h> ...

Во время перетаскивания файла MoveFileEx заглушить процесс
Собственно, какие флаги не ставь, файл не до переместится в случае глушения процесса, в котором и вызывается MoveFileEx ?

Как обойти ограничение размера программы или объема данных без создания дополнительных файлов программы.
Привет всем! Есть ли возможность увеличить допустимый размер файла программы на Qbasice, чтобы не делать большую программу из отдельных ...

2
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.11.2013, 00:43
Thypson, а чем обычный File.Move не устроил?
0
 Аватар для Thypson
21 / 21 / 19
Регистрация: 10.09.2013
Сообщений: 285
11.11.2013, 09:21  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Thypson, а чем обычный File.Move не устроил?
Смотри я скачиваю файл с интернета....
У меня есть мой prog.exe и новая его версия лежит на сайте...
Людям выскакивает сообщение что найдена новая версия.... и программа должна скачать с интернета новую версию, и под таким же именем самозамениться....
Закрыться, замениться и открыться!
Если юзать File.Move будет типо... Процесс занят и т.д
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2013, 09:21
Помогаю со студенческими работами здесь

Повторение или продолжение работы программы (Цикл или нет)?
Ребят, прошу прощения за Заголовок темы. Я абсолютный новичек и даже не знаю, как назвать заголовок. По Ютубу пытаюсь изучать C# и...

Как засечь время выполнения цикла или программы или какого-то оператора?
Как засечь время выполнения цикла или программы или какого-то оператора? И потом это время узнать.

Защита программы от НСД. Защита путем шифрования части программы на флеш-диске или флешке
Написать программу на любом известном Вам языке программирования. Программа должна выполнять функцию защиты программы от НСД. Защита...

Программы в "удалить или изменить программы" windows 8
После восстановления системы без потери файлов с win8.1 до win8 остались программы, игры, но они не высвечиваются в меню "удалить или...

Macro или proc? "Прекращена работа программы" или "fatal error A1010"?
Приветствую каждого, кто забрёл на этот зов помощи! Писал маленькую программу: дана последовательность из 12 натуральных чисел. Выяснить,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru