Hola soto, salvica de nuevo al aparato
Vamos a ver, el My.ini (por definición) solo puede estar en "
x:\" o en "
x:\WINDOWS\", te digo lo de "x" porque depende de la unidad de arranque (yo instalé wXP en el disco "D", en cierta ocasión) y además el directorio "WINDOWS" depende del sistema operativo, en w2000 es "WINNT", así que lo primero que haremos será buscar el directorio "WINDOWS"
Código Delphi
[-]
function GetWinDir:string;
var
pdWindowsDirectory : PChar;
dwWDSize : DWord;
begin
dwWDSize := MAX_PATH + 1;
GetMem( pcWindowsDirectory, dwWDSize );
try
if GetWindowsDirectory( pcWindowsDirectory, dwWDSize ) <> 0 then
Result := pcWindowsDirectory;
finally
FreeMem( pcWindowsDirectory );
end;
end;
Ahora, en el evento OnLoad del Form, hacemos los pasos para crear My.ini (si no lo encontramos)
Código Delphi
[-]
procedure TForm_Main.Form_OnCreate(Sender: TObject);
var
IniFile : TIniFile;
tmpIni : string;
tmpDir : string;
tmpUnit : string[3];
begin
tmpIni := GetWinDir;
if( Trim(tmpDir)='' ) then begin
ShowMessage( 'Directorio Windows NO LOCALIZADO' );
Application.Terminate;
exit;
end;
tmpUnit := tmpDir;
if( tmpDir[Length(tmpDir)]<>'\' )
then tmpDir := tmpDir+'\';
if FileExists( tmpDir+'MyIni' )
then tmpIni := tmpDir +'MyIni'
else tmpIni := tmpUnit+'MyIni';
IniFile := TIniFile.Create( tmpIni );
with IniFile do begin
if( ReadString('mysqld', 'basedir', '')='' ) then begin
WriteString('mysqld', 'basedir', 'G:/WWW/Apache/mysql');
WriteString('mysqld', '#bind-address', '192.168.0.1');
WriteString('mysqld', 'datadir', 'G:/WWW/Apache/mysql/data');
WriteString('mysqld', 'language', 'G:/WWW/Apache/mysql/share/spanish');
WriteString('mysqld', '#slow query log#', '');
WriteString('mysqld', '#tmpdir#', '');
WriteString('mysqld', 'port', '3306');
WriteString('mysqld', '#set-variable', 'key_buffer=16M');
WriteString('WinMySQLadmin', 'Server', 'G:/WWW/Apache/mysql/bin/mysqld-nt.exe');
WriteString('WinMySQLadmin', 'user', 'salvica');
WriteString('WinMySQLadmin', 'password', 'aquí va la tuya');
end;
if( ReadString('ArchivosdePrograma', 'basedir', '')='' ) then begin
WriteString('ArchivosdePrograma', 'basedir', tmpUnit+'Archivos de programa/Soft/MySQL');
WriteString('ArchivosdePrograma', 'datadir', tmpUnit+'Archivos de programa/Soft/MySQL/data');
end;
if( ReadString('BORRAME', 'basedir', '')='' ) then begin
WriteString('BORRAME', 'basedir', tmpUnit+'BORRAME/Soft/MySQL');
WriteString('BORRAME', 'datadir', tmpUnit+'BORRAME/Soft/MySQL/data');
end;
Free;
end;
IniFile := TIniFile.Create( tmpIni );
with IniFile do begin
if( ReadString('original', 'basedir', '')='' ) then begin
WriteString('original', 'basedir', ReadString('mysqld', 'basedir', ''));
WriteString('original', 'datadir', ReadString('mysqld', 'datadir', ''));
end;
Free;
end;
end;
Una vez llegado a este punto, tendrias que poner en la sección "mysqld" el contenido bien de la sección "ArchivosdePrograma" o bien el de la "BORRAME" dependiendo de un valor externo (Aplicación de consola) o por el estado de un "CheckBox" y hacer más o menos lo que yo he hecho con la sección "original"
Espero que todo este rollo te sirva para algo, en caso contrario
sigue chiflando....
Saludos: salvica