Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 20
1

Прописать автозапуск программы в реестре

30.04.2017, 19:18. Показов 838. Ответов 10

доброго времени суток.
Честно говоря не знаю в какую тему писать.
Пишу небольшую программку и столкнулся с такой проблемой,
программно прописал в реестр авто запуск при включении компьютера но при перезагрузки компьютера вылазит ошибка
file access denied
код программы
Delphi
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,registry,Shellapi;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
  windir:array[0..255]of char;//путь к папке винды
  imy:string;//им¤ программы
  wd:string;//гдедеолжнабыть прога
  procedure rename_run;//переименовывание и запуск проги
  procedure v_reestr;//пишем в реестр ј¬“ќ«јѕ”—*
  procedure savefile;//запись в файл
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 imy:= ExtractFileName( ParamStr(0) );
getwindowsdirectory(windir,sizeof(windir));//формирование пути к виндовс
   wd:=windir[0]+':\proga\';
if (imy='na_meste.exe') and (ExtractFilePath(ParamStr(0))=wd) then savefile else  begin v_reestr;rename_run; end;
end;
 
procedure TForm1.rename_run;
var
f:textfile;
begin
ForceDirectories(wd);
assignfile(f,'instal.bat');
rewrite(f);
writeln(f,'@copy '+imy+' '+wd+'na_meste.exe');
writeln(f,'@taskkill /F /IM '+imy);
writeln(f,'@del %0');
closefile(f);
ShellExecute(0,'Open','instal.bat',nil,nil,1);
end;
 
procedure TForm1.savefile;
var
f:textfile;
begin
assignfile(f,'soobshenie.txt');
rewrite(f);
writeln(f,'получилось записать при запуске компа');
closefile(f);
ShellExecute(0,'Open','soobshenie.txt',nil,nil,1);
end;
 
procedure TForm1.v_reestr;
var
reg:TRegistry;
l:string;
begin// начало прописи в реестре автозапуска
reg:=TRegistry.create;
with reg do
begin
openkey('software',true);
openkey('microsoft',true);
openkey('windows',true);
openkey('CurrentVersion',true);
openkey('run',true);
l:= readstring('1');
writestring('1',wd+'na_meste.exe');//им¤ и путь запускаемоу проги
end;
end;//конец прописи в реестр фвтозапуска
 
end.
Изображения
 
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2017, 19:18
Ответы с готовыми решениями:

Прописать программу в реестр(автозапуск)
как прописать программу в реестр? если можно,то код для подмены explorer.exe и с его возвращением...

Как можно прописать программу в автозапуск?
Приветствую всех форумчан! У меня такой вопрос: какими методами еще,помимо прописи в реестре,...

Автозапуск в системном реестре
Где находиться автозапуск в системном реестре и как его отключить или включить.

Не работает автозапуск, хотя запись в реестре присутствует
Доброго времени суток! Столкнулся с проблемой и бьюсь над ней уже не один день: Необходимо...

10
Эксперт Pascal/Delphi
4735 / 2714 / 841
Регистрация: 04.10.2012
Сообщений: 9,898
30.04.2017, 21:11 2
Цитата Сообщение от blaksoft Посмотреть сообщение
не знаю в какую тему писать
Таких тем здесь валом. Поиском пользоваться не пробовали? См. сюда.

Добавлено через 1 минуту
Цитата Сообщение от blaksoft Посмотреть сообщение
программно прописал в реестр авто запуск
сплошная чушь, а не код.
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,097
30.04.2017, 21:34 3
Цитата Сообщение от blaksoft Посмотреть сообщение
Delphi
1
2
3
4
5
openkey('software',true);
openkey('microsoft',true);
openkey('windows',true);
openkey('CurrentVersion',true);
openkey('run',true);
??? зачем разделять ключи? RootKey не задан... Почитай про работу с реестром.
0
0 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 20
01.05.2017, 11:37  [ТС] 4
даже исключив процедуру
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.v_reestr;
var
reg:TRegistry;
l:string;
begin// начало прописи в реестре автозапуска
reg:=TRegistry.create;
with reg do
begin
openkey('software',true);
openkey('microsoft',true);
openkey('windows',true);
openkey('CurrentVersion',true);
openkey('run',true);
l:= readstring('1');
writestring('1',wd+'na_meste.exe');//им¤ и путь запускаемоу проги
end;
end;//конец прописи в реестр фвтозапуска
и записав в реестр автозапуск вручную ошибка не исчезла значит дело не в этой процедуре, авто в чем, я не могу понять
0
Модератор
7270 / 4753 / 1996
Регистрация: 21.01.2014
Сообщений: 20,209
Записей в блоге: 3
01.05.2017, 13:30 5
Цитата Сообщение от blaksoft Посмотреть сообщение
в чем, я не могу понять
Я так и не увидел, в какой раздел это все пишется... Если в HKLM - нужны права администратора... Точно так же, как и для для убийства "чужого" процесса
0
Эксперт Pascal/Delphi
4735 / 2714 / 841
Регистрация: 04.10.2012
Сообщений: 9,898
01.05.2017, 15:55 6
blaksoft, я Вам все написал выше по ссылке. Мозг включите.
0
0 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 20
01.05.2017, 20:43  [ТС] 7
при включении мозга я понимаю что дело не в коде который отвечает за пропись в реестр авто запуска программы, потому что вырезав этот кусок кода и прописав в реестре вручную, хоть в HKEY_LOCAL_MACHINE хоть в HKEY_CURRENT_USER ошибка выходит одна и та же, если я не прав подскажите что не так

Добавлено через 3 минуты
Цитата Сообщение от D1973 Посмотреть сообщение
Я так и не увидел, в какой раздел это все пишется... Если в HKLM - нужны права администратора... Точно так же, как и для для убийства "чужого" процесса
сколько я не писал по умолчанию всегда пишет в HKEY_CURRENT_USER. я уже не раз пользовался этим кодом все работало нормально
0
Модератор
7270 / 4753 / 1996
Регистрация: 21.01.2014
Сообщений: 20,209
Записей в блоге: 3
01.05.2017, 21:24 8
Ну так пойдитесь отладчиком по своему коду - он Вам покажет, откуда ноги растут...
0
Эксперт Pascal/Delphi
4735 / 2714 / 841
Регистрация: 04.10.2012
Сообщений: 9,898
01.05.2017, 21:57 9
blaksoft, Ваш код - бред. Хотите прописать в автозапуск? Я привёл рабочий пример. Зачем мудрить?
0
0 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 20
03.05.2017, 18:50  [ТС] 10
Цитата Сообщение от droider Посмотреть сообщение
blaksoft, Ваш код - бред. Хотите прописать в автозапуск? Я привёл рабочий пример. Зачем мудрить?
написал автозапуск по приведенному рабочему примеру проблема осталась та же,а когда программу запускаешь кликая по ней все запускается нормально так что дело, как я понимаю не в прописывании автозапуска
Delphi
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,registry,Shellapi;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
  windir:array[0..255]of char;//путь к папке винды
  imy:string;//им¤ программы
  wd:string;//гдедеолжнабыть прога
  procedure rename_run;//переименовывание и запуск проги
  procedure v_reestr;//пишем в реестр ј¬“ќ«јѕ”—*
  procedure savefile;//запись в файл
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 imy:= ExtractFileName( ParamStr(0) );
getwindowsdirectory(windir,sizeof(windir));//формирование пути к виндовс
   wd:=windir[0]+':\proga\';
if (imy='na_meste.exe') and (ExtractFilePath(ParamStr(0))=wd) then savefile else  begin v_reestr;rename_run; end;
end;
 
procedure TForm1.rename_run;
var
f:textfile;
begin
ForceDirectories(wd);
assignfile(f,'instal.bat');
rewrite(f);
writeln(f,'@copy '+imy+' '+wd+'na_meste.exe');
writeln(f,'@taskkill /F /IM '+imy);
writeln(f,'@del %0');
closefile(f);
ShellExecute(0,'Open','instal.bat',nil,nil,1);
end;
 
procedure TForm1.savefile;
var
f:textfile;
begin
assignfile(f,'soobshenie.txt');
rewrite(f);
writeln(f,'получилось записать при запуске компа');
closefile(f);
ShellExecute(0,'Open','soobshenie.txt',nil,nil,1);
end;
 
procedure TForm1.v_reestr;
var
reg:TRegistry;
begin// начало прописи в реестре автозапуска
begin
reg := tregistry.create;
reg.rootkey := HKEY_CURRENT_USER;
if reg.openkey('software\microsoft\windows\currentversion\run', false)then
reg.writestring('1',wd+'na_meste.exe');
reg.closekey;
reg.free;
end;
end;//конец прописи в реестр автозапуска
end.
где здесь ошибки?

Добавлено через 11 минут
запустил программу через bat файл программа запустилась, этот же bat файл прописал в авторзапуск bat запускается а программу запустить не может выводит ошибку "file access denied" ПОЧЕМУ?
0
0 / 0 / 1
Регистрация: 02.02.2015
Сообщений: 20
13.05.2017, 19:45  [ТС] 11
проблема решена МОЖЕТ КОМУ ПОМОЖЕТ
дело было вовсе не в прописывании программы в реестре (и как мне писали что код чушь он работает нормально и прописывать
Delphi
1
reg.rootkey := HKEY_CURRENT_USER;
не обязательно потому что по умолчанию rootkey := HKEY_CURRENT_USER )
вся проблема в том что путь к используемому программой файлу был указан просто именем без указания полного пути, а при автозапуске программа текущей папкой считает "system32"
поэтому и выскакивает ошибка
вот полный код
Delphi
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,registry,Shellapi;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
  windir:array[0..255]of char;//путь к папке винды
  imy:string;//им¤ программы
  wd:string;//гдедеолжнабыть прога
  procedure rename_run;//переименовывание и запуск проги
  procedure v_reestr;//пишем в реестр ј¬“ќ«јѕ”—*
  procedure savefile;//запись в файл
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 imy:= ExtractFileName( ParamStr(0) );
getwindowsdirectory(windir,sizeof(windir));//формирование пути к виндовс
   wd:=windir[0]+':\proga\';
if (imy='na_meste.exe') and (ExtractFilePath(ParamStr(0))=wd) then savefile else  begin v_reestr;rename_run; end;
end;
 
procedure TForm1.rename_run;
var
f:textfile;
begin
ForceDirectories(wd);
assignfile(f,'instal.bat');
rewrite(f);
writeln(f,'@copy '+imy+' '+wd+'na_meste.exe');
writeln(f,'@taskkill /F /IM '+imy);
writeln(f,'@del %0');
closefile(f);
ShellExecute(0,'Open','instal.bat',nil,nil,1);
end;
 
procedure TForm1.savefile;
var
f:textfile;
p:pchar;
begin
p:=pchar(ExtractFilePath(ParamStr(0))+'soobshenie.txt');
assignfile(f,ExtractFilePath(ParamStr(0))+'soobshenie.txt');
rewrite(f);
writeln(f,'получилось записать при запуске компа');
closefile(f);
ShellExecute(0,'Open',p,nil,nil,1);
end;
 
procedure TForm1.v_reestr;
var
reg:TRegistry;
l:string;
begin// начало прописи в реестре автозапуска
reg:=TRegistry.create;
with reg do
begin
openkey('software',true);
openkey('microsoft',true);
openkey('windows',true);
openkey('CurrentVersion',true);
openkey('run',true);
l:= readstring('1');
writestring('1',wd+'na_meste.exe');//имя и путь запускаемой проги
end;
end;//конец прописи в реестр автозапуска
 
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2017, 19:45

Как прописать программу в автозапуск?
Пишу маленькое приложение для виндоуз. Оно заменяет собой гаджет часы в Win7. Ответьте пожалуйста...

Как прописать программу в автозапуск на Windows 8?
Подскажите пожалуйста, на win7 отлично работал метод с прописыванием в автозагрузку в реестре....

как прописать в реестре возможность Создать папку?
Всем привет! Подскажите пожалуйста, как прописать в реестре возможность Создать папку. В данный...

Как прописать автозапуск файла после его загрузки?
Написал я код для загрузки файла с сервера на комп значит, а вот теперь вопрос, как заставить файл...

Программы автозагрузки Windows в реестре. Отключение программы без удаления записи
Как узнать включена ли автозагрузка программы в реестре Windows и как отключить программу...

Автозапуск программы: прекращена работа программы
Ребята, написал не сложную программу для управления сервисом, и задал в автозапуске, но при старте...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.