C# - Trabalhando com variáveis de ambiente |
Neste artigo vou apresentar conceitos relacionados às variáveis de ambiente e mostrar como podemos tratá-las em um programa usando a linguagem C#. |
A classe Environment pode ser usada para para obter informações sobre o ambiente atual da plataforma na qual estamos trabalhando.
Ela pode ser usada para recuperar informações como argumentos de linha de comando, o código de saída, as configurações de variável de ambiente, conteúdo da pilha de chamadas, tempo desde a última inicialização do sistema e a versão do Common Language Runtime (CLR).
O método GetEnvironmentVariable(String) recupera uma variável de ambiente do bloco de ambiente do processo atual o qual inclui as seguintes variáveis de ambiente:
Para recuperar todas as variáveis de ambiente junto com seus valores, chame o método GetEnvironmentVariables.(Nomes de variável de ambiente não diferenciam maiúsculas de minúsculas.)
A
enumeração EnvironmentVariableTarget pode ser usada por determinadas
sobrecargas dos métodos SetEnvironmentVariable,
GetEnvironmentVariable, e GetEnvironmentVariables para especificar o
local ou o destino, onde o nome e o valor de uma variável de ambiente é
armazenados ou recuperado.
O destino pode ser um dos três locais:
- O bloco de ambiente associado com o processo atual;
- A chave de registro de sistema operacional Windows reservada para variáveis de
ambiente associadas ao usuário atual;
- A chave de registro reservada para variáveis de ambiente associadas a todos os
usuários na máquina local;
Neste artigo vamos criar um exemplo que mostra como usar esses recursos para editar caminhos de variáveis de ambiente.
Recursos Usados:
Criando o projeto no VS 2015 Community
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual C# e o template Windows Forms Application;
Informe o nome PathEditor e clique no botão OK;
No formulário form1.cs inclua a partir da ToolBox os seguintes controles :
Disponha os controles conforme o leiaute da figura abaixo:
A seguir vamos definir 3 métodos no formulário form1.cs :
private void ObtemCaminhoVariavel()
{
string valor = "";
try
{
valor = Environment.GetEnvironmentVariable("Path", Alvo);
}
catch (SecurityException)
{
MessageBox.Show("Você não tem permissão para realizar esta operação.\nExecute o programa como Administrador");
}
if (valor != "")
{
string[] item = valor.Split(new char[]{Path.PathSeparator}, StringSplitOptions.RemoveEmptyEntries);
lblEntradas.Items.Clear();
lblEntradas.Items.AddRange(item);
lblEntradas.SelectedIndex = 0;
}
}
private void DefineCaminhoVariavel()
{
string valor = CriarCaminhoVariavel();
try
{
Environment.SetEnvironmentVariable("Path", valor, Alvo);
}
catch (SecurityException)
{
MessageBox.Show("Você não tem permissão para realizar esta operação.\nExecute o programa como Administrador");
}
}
private string CriarCaminhoVariavel()
{
string value = String.Empty;
foreach (Object o in lblEntradas.Items)
value += o.ToString() + Path.PathSeparator;
return value;
}
|
Nota: A classe Split retorna um array de única dimensão contendo o número de substrings separadas no processo dependendo do critério e delimitador usado.
A seguir vamos definir o método Alvo que retorna o tipo de processo sobre o qual as informações serão retornadas : Machine, Process ou User:
public EnvironmentVariableTarget Alvo
{
get
{
if (radMachine.Checked)
return EnvironmentVariableTarget.Machine;
else if (radProcess.Checked)
return EnvironmentVariableTarget.Process;
else
return EnvironmentVariableTarget.User;
}
}
|
A seguir vamos tratar os eventos dos controles usados no formulário.
1- Evento Click do botão Procurar
private void btnProcurar_Click(object sender, EventArgs e)
{
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
txtValorAtual.Text = folderBrowserDialog.SelectedPath;
}
|
1- Evento Click do botão Atualizar
private void btnAtualizar_Click(object sender, EventArgs e)
{
int idx = lblEntradas.SelectedIndex;
if (idx != -1)
lblEntradas.Items[idx] = txtValorAtual.Text;
}
|
1- Evento Click do botão Deletar
private void btnDeletar_Click(object sender, EventArgs e)
{
int idx = lblEntradas.SelectedIndex;
if (idx != -1)
{
lblEntradas.Items.RemoveAt(idx);
idx--;
if (idx < 0)
{
idx = 0;
}
lblEntradas.SelectedIndex = idx;
}
}
|
1- Evento Click do botão Incluir
private void btnIncluir_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(txtValorAtual.Text))
lblEntradas.Items.Add(txtValorAtual.Text);
}
|
1- Evento Click do botão OK
private void btnOk_Click(object sender, EventArgs e)
{
DefineCaminhoVariavel();
Close();
}
|
1- Evento Click do botão Cancelar
private void btnCancelar_Click(object sender, EventArgs e)
{
Close();
}
|
1- Evento Click do botão Exportar
private void btnExportar_Click(object sender, EventArgs e)
{
using(SaveFileDialog sfd = new SaveFileDialog())
{
sfd.Filter = "Arquivos Textos (*.txt)|*.txt";
sfd.Title = "Salvar Variável de ambiente para o disco";
sfd.FileName = "ValorCaminhoAntigo.txt";
sfd.DefaultExt = ".txt";
if (sfd.ShowDialog() == DialogResult.OK)
File.WriteAllText(sfd.FileName, CriarCaminhoVariavel());
}
}
|
1- Evento MouseUp do Listbox
private void lbEntradas_MouseUp(object sender, MouseEventArgs e)
{
txtValorAtual.Text = lblEntradas.SelectedItem.ToString();
}
|
1- Evento CheckedChanged do RadioButton Process:
private void radProcess_CheckedChanged(object sender, EventArgs e)
{
ObtemCaminhoVariavel();
}
|
Executando o projeto iremos obter:
Pegue o projeto completo aqui: PathEditor.zip
"Aquele que diz: Eu
conheço-o (a Jesus), e não guarda os seus mandamentos, é mentiroso, e nele não
está a verdade."
1 João 2:4
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB .NET - Identificando pastas especiais no .NET 4.0 - Macoratti.net
VB.NET - Lendo parâmetros da linha de comando - Macoratti.net