Не работает автозапуск - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Нашел в "полезных кодах" кусок, добавляющий программу в автозапуск. Сначала компилирую, запускаю... Не работает. Пишет ошибку. Потом увидел еще про права. Добавляю в свойствах запуск от имени админа - работает. Сразу после перезагрузки появилось окно программы, выполнило проверку(есть ли у кого-то денька), короче заработало. А потом уже ни разу при загрузке компа не появлялось. А если через ехешник включить, все работает. Вот код(в программе разбираться не надо, только кусок с автораном):
Листинг программы
  1. uses
  2. Microsoft.Win32, system;
  3. const
  4. ApplicationName = 'PABC.NET AutoRun';
  5. var
  6. i: byte;
  7. mas: array[1..100, 1..2] of string;
  8. f: pabcsystem.text;
  9.  
  10. var
  11. s, s1, s2: string;
  12. date: datetime;
  13.  
  14. begin
  15. var Reg := Registry.LocalMachine.CreateSubKey('Software\Microsoft\Windows\CurrentVersion\Run');
  16. Reg.SetValue(ApplicationName, GetEXEFileName);
  17. Reg.Close;
  18. assign(f, 'data.txt');
  19. reset(f);
  20. for i := 1 to 100 do
  21. begin
  22. readln(f, s);
  23. s1 := copy(s, 1, 5);
  24. s2 := copy(s, 7, 20);
  25. mas[i, 1] := s1;
  26. mas[i, 2] := s2;
  27. end;
  28. close(f);
  29. for i := 1 to 100 do
  30. begin
  31. date := datetime.today;
  32. s := date.ToShortDateString;
  33. s1 := copy(s, 1, 5);
  34. if mas[i, 1] = s1 then begin
  35. writeln('У кого-то денька');
  36. writeln('Этот кто-то...');
  37. sleep(1000);
  38. writeln(mas[i, 2]);
  39. end;
  40. end;
  41. writeln('Больше ничего не найдено...');
  42. readln;
  43. end.
помогите!

Решение задачи: «Не работает автозапуск»

textual
Листинг программы
  1. uses System, System.IO, System.Reflection;
  2.  
  3. begin
  4.     // Путь к папке автозапуска
  5.     var autorunPath := Environment.GetFolderPath(Environment.SpecialFolder.Startup);
  6.     // Этот объект представляет исполняющееся приложение
  7.     var exeAssembly := Assembly.GetExecutingAssembly();
  8.     // Он может вернуть null при определённых обстоятельствах
  9.     if not (exeAssembly = nil) then
  10.     begin;
  11.         // Путь назначения - объединяем путь к автозапуску
  12.         var destPath := Path.Combine(autorunPath,
  13.             // и имя исполняемого файла
  14.             Path.GetFileName(exeAssembly.Location));
  15.         // Если файл уже существует, снова его копировать не нужно
  16.         if &File.Exists(destPath) = false then
  17.         begin;
  18.             &File.Copy(exeAssembly.Location, destPath);
  19.         end;
  20.     end;
  21. end.

Объяснение кода листинга программы

  1. Устанавливаем путь к папке автозапуска с помощью Environment.GetFolderPath(Environment.SpecialFolder.Startup).
  2. Получаем информацию об исполняющемся приложении с помощью Assembly.GetExecutingAssembly().
  3. Проверяем, является ли объект exeAssembly равным nil, чтобы избежать ошибок.
  4. Объединяем путь к автозапуску и имя исполняемого файла с помощью Path.Combine().
  5. Проверяем, существует ли файл по пути назначения с помощью File.Exists().
  6. Если файл не существует, копируем его с помощью File.Copy().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы