Página 1 de 1

Mudar path Windows

Enviado: 07 Nov 2014 18:42
por janio
Eh possível mudar path do Windows via sistema??

Janio

Mudar path Windows

Enviado: 07 Nov 2014 22:15
por janio
Pra delphi encontrei o codigo abaixo, basta ver se ha algo para harbour:

https://groups.google.com/forum/#!topic ... mtghqObvzs

Código: Selecionar todos

Olá, Pedro!

Você pode pesquisar na Internet sobre os métodos GetEnvironmentVariable e SetEnvironmentVariable do Windows, acessíveis via Delphi.

Esse foi o primeiro que encontrei no google:

http://www.delphidabbler.com/articles?article=6

Nesse artigo, escrito pelo Peter Johnson, são apresentadas duas rotinas para facilitar o trabalho, que reproduzo abaixo:

function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer;  // buffer size required for value
begin
  // Get required buffer size (inc. terminal #0)
  BufSize := GetEnvironmentVariable( PChar(VarName), nil, 0);
  if BufSize > 0 then
  begin
    // Read env var value into result string
    SetLength(Result, BufSize - 1);
    GetEnvironmentVariable(PChar(VarName), PChar(Result), BufSize);
  end
  else
    // No such environment variable
    Result := '';
end;

function SetEnvVarValue(const VarName, VarValue: string): Integer;
begin
  // Simply call API function
  if SetEnvironmentVariable(PChar(VarName), PChar(VarValue)) then
    Result := 0
  else
    Result := GetLastError;
end;

Basicamente você deve ler a variável de ambiente "PATH" usando o método GetEnvVarValue, verificar se o valor retornado já contém o caminho que você deseja adicionar e, caso não contenha, alterar o conteúdo da variável "PATH" adicionando o caminho desejado e atualizar seu novo valor usando o método SetEnvVarValue. Veja um exemplo simplificado:

var
  s: string;
  i: Integer;
begin
  s := GetEnvVarValue('PATH');
  if not AnsiContainsText(s, 'C:\MeuCaminho') then
  begin
    s := s + ';C:\MeuCaminho';
    i := SetEnvVarValue('PATH', s);
    if i > 0 then
      raise Exception.CreateFmt('Ocorreu o erro %d ao tentar atualizar a variável de ambiente "PATH"!', [i]);
  end;

end;

O ideal seria quebrar o resultado do GetEnvVarValue em strings, usando como referência o ";" (ponto e vírgula) que serve para separar cada caminho do 'PATH'.

Um abraço,

Jair


Mudar path Windows

Enviado: 08 Nov 2014 11:44
por Jairo Maia
Olá Jânio,

Assim funciona, mas precisa estar rodando no modo administrador:

Código: Selecionar todos

Function Main()
 cPath := GetEnv( "Path" ) + ";C:\Meu Teste"
 Hb_Run( [SETX PATH "&cPath." /M] )
Return Nil

Mudar path Windows

Enviado: 08 Nov 2014 14:29
por janio
Ola Jairo,

Pra mim nao funcionou, mesmo rodando como administrador no meu win7 64bits!

cPath := GetEnv( "Path" ) + ";C:\CriaSoftWare"
Hb_Run( [SETX PATH "&cPath." /M] )

Resultado path apos o comando:

PATH=C:\MinGW\bin;C:\MinGW\libexec\gcc\i686-pc-mingw32\4.8.2;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x64;C:\Program Files (x86)\Windows Live\Shared;c:\xharbour\bin;c:\bcc55\bin;C:\Program Files\TortoiseSVN\bin;C:\Medcl5\xbapi\bin\build1211;C:\Medcl\xbapi\bin\build1210;C:\Medcl\xbapi\bin\build1211;path=C:\MinGW\bin;C:\MinGW\libexec\gcc\i686-pc-mingw32\4.8.2;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\1.5\bin\x64;C:\Program Files (x86)\Windows Live\Shared;c:\xharbour\bin;c:\bcc55\bin;C:\Program Files\TortoiseSVN\bin;C:\Medcl5\xbapi\bin\build1211;C:\Medcl\xbapi\bin\build1210;C:\Medcl\xbapi\bin\build1211;c:\harbour32\bin;c:\MinGW\bin

Não consta o caminho "c:\CriaSoftWare" que acrescentei!

Mudar path Windows

Enviado: 08 Nov 2014 17:28
por janio
So agora prestei atenção numa coisa:

ao executar os comandos acima, abre uma janela 'preta' com a msg:

AVISO: os dados serão truncados em 1024 caracteres ao serem salvos

Deve ser por isso q não funciona!

Janio

Mudar path Windows

Enviado: 08 Nov 2014 17:35
por Jairo Maia
Olá Jânio,

Com certeza. Os dados na linha do Path são truncados em 1.024 bytes para salvar o registro. (mesmo no Win 7 64).

Mudar path Windows

Enviado: 08 Nov 2014 18:02
por janio
Solução??

Tem outro inconveniente: qndo o path eh alterado pelo prompt, aquela alteração fica ativa apenas e enquanto a janela do prompt estiver aberta. Não tenho certeza disso mas parece q funciona assim. No caso precisamos que seja alterado tbm nas variaveis de ambiente das configurações avançadas do windows.

Deve haver alguma forma de alterar o path do windows (sem restrição). Alguns programas em sua instalação alteração o path do windows...

Janio

Mudar path Windows

Enviado: 08 Nov 2014 18:47
por rochinha
Amiguinhos,

Para alterar uma variável de ambiente permanentemente é preciso ir ao Painel de Controle ou diretamente no registro.

Veja este tópico aqui

O comando:

nircmd.exe regedit "HKLM\Software\Microsoft\Windows\CurrentVersion" "CommonFilesDir"

Manipula o registro passando a chave e as variáveis.

As chaves de ambiente estão em \HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
\HKCU\Environment
.

Segue uma pequena lista de variáveis existentes:

%ALLUSERSPROFILE% C:\ProgramData
%APPDATA% C:\Users\(username}\AppData\Roaming
%CommonProgramFiles% C:\Program Files\Common Files
%COMPUTERNAME% {computername}
%COMSPEC% C:\Windows\System32\cmd.exe
%HOMEDRIVE% C:
%HOMEPATH% \Users\{username}
%LOCALAPPDATA% C:\Users\{username}\AppData\Local
%PATH% C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem
%PATHEXT% .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF; .WSH; .MSC
%ProgramData% C:\ProgramData
%PROGRAMFILES% Directory containing program files, usually C:\Program Files
%PROMPT% Code for current command prompt format. Code is usually $P$G
%Public% C:\Users\Public
%SYSTEMDRIVE% The drive containing the Windows XP root directory, usually C:
%SYSTEMROOT% The Windows XP root directory, usually C:\Windows
%TEMP% and %TMP% C:\Users\{Username}\AppData\Local\Temp
%USERNAME% {username}
%USERPROFILE% C:\Users\{username}
%WINDIR% C:\Windows

Mudar path Windows

Enviado: 08 Nov 2014 19:02
por janio
Nao temos em harbour nada para mudar diretamente o registro do windows?

Janio

Mudar path Windows

Enviado: 09 Nov 2014 01:09
por rochinha

Mudar path Windows

Enviado: 09 Nov 2014 11:21
por janio
Matou a pau, Rochinha!

:|< :)) :{ :)Pos
:-Y X:) ;-* :%

Vlw

Janio