Problema ao criar atalho de internet
Estou com um problema na criação de atalho da internet. Estou utilizando a seguinte função para criar os atalhos:
procedure CriarAtalhoDaNet(const FileName, URL, Icon : string);
var
INI : TIniFile;
directory : string;
begin
directory := ExtractFilePath (Application.ExeName);
INI := TIniFile.Create(directory + FileName + ''.url'');
with INI do
try
//Escrevendo a URL do Atalho
WriteString(''InternetShortcut'',''URL'',URL);
//Extraindo Ícone de um Executável, neste caso do EXE do Internet Explorer
WriteString(''InternetShortcut'',''IconFile'', Icon);
//Colocando o ìndice do ícone, porque o executavel possui mais de um Ícone
WriteString(''InternetShortcut'',''IconIndex'',''0'');
finally
FreeAndNil(INI);
end;
FreeAndNil(INI);
end;
E dentro de um botão, eu chamo a função da seguinte forma: CriarAtalhoDaNet(''Teste'', ''https://www.google.com.br'', ''C:\Delphi\teste\Win32\Debug\Icons\AreaDeArquivos.ico'');
Assim que é executado essa função, o programa cria o arquivo .url corretamente e caso eu abra ele cai no site do google.
Porém, se eu executar o programa novamente, trocando apenas a URL da função, por exemplo: CriarAtalhoDaNet(''Teste'', ''https://www.youtube.com'', ''C:\Delphi\teste\Win32\Debug\Icons\AreaDeArquivos.ico'');
Ele não sobrescreve a URL que está no arquivo .url
Conforme está na função, já tentei usar o FreeAndNil para liberar o objeto, já tentei utilizar somente o Free para as informações não ficarem presas.
Mesmo apagando o arquivo, ele não cria novamente com a URL que eu solicitei, só vai funcionar se eu executar o programa em outro diretório, mas depois de executar em outro diretório, aquele também já era.
Fiz várias confirmações de que ele recebe o valor correto quando eu chamo a função, inclusive se eu acessar as Propriedades do arquivo, na aba "Documento da Web" ele fica com a URL da primeira vez que foi executado (que nessa ocasião seria https://www.google.com.br), mas caso eu acesse a aba "Detalhes" terá na coluna Propriedade a "URL" com o valor "https://www.youtube.com".
Consegui verificar, que quando troco o nome depois de executado o programa pela segunda vez, ele troca para a URL correta. Por exemplo: Executei a primeira vez com a URL: https://www.google.com.br, em seguida apaguei o arquivo e executei a segunda vez com a URL: https://www.youtube.com. Ele ficará salvo a URL: https://www.google.com.br (Que está incorreto), mas caso eu altere o nome do arquivo manualmente de "Teste" para "Teste1", ele recebe a URL: https://www.youtube.com.(OBS: Caso eu volte o nome para "Teste", ele volta a URL para https://www.google.com.br)
Estou quebrando a cabeça já tem uns dias com esse problema, não sei mais o que fazer.
procedure CriarAtalhoDaNet(const FileName, URL, Icon : string);
var
INI : TIniFile;
directory : string;
begin
directory := ExtractFilePath (Application.ExeName);
INI := TIniFile.Create(directory + FileName + ''.url'');
with INI do
try
//Escrevendo a URL do Atalho
WriteString(''InternetShortcut'',''URL'',URL);
//Extraindo Ícone de um Executável, neste caso do EXE do Internet Explorer
WriteString(''InternetShortcut'',''IconFile'', Icon);
//Colocando o ìndice do ícone, porque o executavel possui mais de um Ícone
WriteString(''InternetShortcut'',''IconIndex'',''0'');
finally
FreeAndNil(INI);
end;
FreeAndNil(INI);
end;
E dentro de um botão, eu chamo a função da seguinte forma: CriarAtalhoDaNet(''Teste'', ''https://www.google.com.br'', ''C:\Delphi\teste\Win32\Debug\Icons\AreaDeArquivos.ico'');
Assim que é executado essa função, o programa cria o arquivo .url corretamente e caso eu abra ele cai no site do google.
Porém, se eu executar o programa novamente, trocando apenas a URL da função, por exemplo: CriarAtalhoDaNet(''Teste'', ''https://www.youtube.com'', ''C:\Delphi\teste\Win32\Debug\Icons\AreaDeArquivos.ico'');
Ele não sobrescreve a URL que está no arquivo .url
Conforme está na função, já tentei usar o FreeAndNil para liberar o objeto, já tentei utilizar somente o Free para as informações não ficarem presas.
Mesmo apagando o arquivo, ele não cria novamente com a URL que eu solicitei, só vai funcionar se eu executar o programa em outro diretório, mas depois de executar em outro diretório, aquele também já era.
Fiz várias confirmações de que ele recebe o valor correto quando eu chamo a função, inclusive se eu acessar as Propriedades do arquivo, na aba "Documento da Web" ele fica com a URL da primeira vez que foi executado (que nessa ocasião seria https://www.google.com.br), mas caso eu acesse a aba "Detalhes" terá na coluna Propriedade a "URL" com o valor "https://www.youtube.com".
Consegui verificar, que quando troco o nome depois de executado o programa pela segunda vez, ele troca para a URL correta. Por exemplo: Executei a primeira vez com a URL: https://www.google.com.br, em seguida apaguei o arquivo e executei a segunda vez com a URL: https://www.youtube.com. Ele ficará salvo a URL: https://www.google.com.br (Que está incorreto), mas caso eu altere o nome do arquivo manualmente de "Teste" para "Teste1", ele recebe a URL: https://www.youtube.com.(OBS: Caso eu volte o nome para "Teste", ele volta a URL para https://www.google.com.br)
Estou quebrando a cabeça já tem uns dias com esse problema, não sei mais o que fazer.
Lucas Ribeiro
Curtidas 1