Не работает автозапуск - PascalABC.NET
Формулировка задачи:
Нашел в "полезных кодах" кусок, добавляющий программу в автозапуск. Сначала компилирую, запускаю... Не работает. Пишет ошибку. Потом увидел еще про права. Добавляю в свойствах запуск от имени админа - работает. Сразу после перезагрузки появилось окно программы, выполнило проверку(есть ли у кого-то денька), короче заработало. А потом уже ни разу при загрузке компа не появлялось. А если через ехешник включить, все работает. Вот код(в программе разбираться не надо, только кусок с автораном):
помогите!
Листинг программы
- uses
- Microsoft.Win32, system;
- const
- ApplicationName = 'PABC.NET AutoRun';
- var
- i: byte;
- mas: array[1..100, 1..2] of string;
- f: pabcsystem.text;
- var
- s, s1, s2: string;
- date: datetime;
- begin
- var Reg := Registry.LocalMachine.CreateSubKey('Software\Microsoft\Windows\CurrentVersion\Run');
- Reg.SetValue(ApplicationName, GetEXEFileName);
- Reg.Close;
- assign(f, 'data.txt');
- reset(f);
- for i := 1 to 100 do
- begin
- readln(f, s);
- s1 := copy(s, 1, 5);
- s2 := copy(s, 7, 20);
- mas[i, 1] := s1;
- mas[i, 2] := s2;
- end;
- close(f);
- for i := 1 to 100 do
- begin
- date := datetime.today;
- s := date.ToShortDateString;
- s1 := copy(s, 1, 5);
- if mas[i, 1] = s1 then begin
- writeln('У кого-то денька');
- writeln('Этот кто-то...');
- sleep(1000);
- writeln(mas[i, 2]);
- end;
- end;
- writeln('Больше ничего не найдено...');
- readln;
- end.
Решение задачи: «Не работает автозапуск»
textual
Листинг программы
- uses System, System.IO, System.Reflection;
- begin
- // Путь к папке автозапуска
- var autorunPath := Environment.GetFolderPath(Environment.SpecialFolder.Startup);
- // Этот объект представляет исполняющееся приложение
- var exeAssembly := Assembly.GetExecutingAssembly();
- // Он может вернуть null при определённых обстоятельствах
- if not (exeAssembly = nil) then
- begin;
- // Путь назначения - объединяем путь к автозапуску
- var destPath := Path.Combine(autorunPath,
- // и имя исполняемого файла
- Path.GetFileName(exeAssembly.Location));
- // Если файл уже существует, снова его копировать не нужно
- if &File.Exists(destPath) = false then
- begin;
- &File.Copy(exeAssembly.Location, destPath);
- end;
- end;
- end.
Объяснение кода листинга программы
- Устанавливаем путь к папке автозапуска с помощью
Environment.GetFolderPath(Environment.SpecialFolder.Startup)
. - Получаем информацию об исполняющемся приложении с помощью
Assembly.GetExecutingAssembly()
. - Проверяем, является ли объект
exeAssembly
равнымnil
, чтобы избежать ошибок. - Объединяем путь к автозапуску и имя исполняемого файла с помощью
Path.Combine()
. - Проверяем, существует ли файл по пути назначения с помощью
File.Exists()
. - Если файл не существует, копируем его с помощью
File.Copy()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д