Classe System.Environment não tem um método para definir a variável de ambiente para o processo atual

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 829145
Sintomas
A classe System.Environment tem métodos para ler as variáveis de ambiente. No entanto, essa classe não tem nenhum método para definir as variáveis de ambiente para o processo atual.
Como Contornar
Para contornar esse problema, use os serviços de interoperabilidade para definir as variáveis de ambiente. Você pode definir uma variável de ambiente usando o Microsoft Platform Software Development Kit (SDK) SetEnvironmentVariable função.

Para definir uma variável de ambiente chamando a função SDK SetEnvironmentVariable , execute estas etapas:
  1. Inicie Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em New Project .
  3. Na caixa de diálogo New Project , clique em projetos translation from VPE for Csharp Visual .

    Observação No Visual Studio 2005, os projetos Visual translation from VPE for Csharp é ser alterado para translation from VPE for Csharp Visual .
  4. Em modelos , clique em Aplicativo de console e, em seguida, clique em OK . Por padrão, o arquivo Class1.cs é criado.
  5. No modo de exibição código do arquivo Class1.cs, especifique a instrução usando a declarar os namespaces para que você não tem que qualificar as declarações posteriormente no código. Cole o seguinte código no arquivo Class1.cs:
    using System;using System.Runtime.InteropServices;using System.Security;using System.Security.Permissions;
  6. Declare o método estático e o método externo . Use o atributo DllImport para importar o arquivo Kernel32.dll. Essa declaração indica que a definição da função está fora do código. Para fazer isso, cole o seguinte código no arquivo Class1.cs file:
    // Import the Kernel32 dll file.[DllImport("kernel32.dll",CharSet=CharSet.Auto, SetLastError=true)][return:MarshalAs(UnmanagedType.Bool)]// The declaration is similar to the SDK functionpublic static extern bool SetEnvironmentVariable(string lpName, string lpValue);
  7. Cole o código a seguir no arquivo Class1.cs para adicionar um método estático na classe que chama o método SetEnvironmentVariable e que define a variável de ambiente: bool estático público
    public static bool SetEnvironmentVariableEx(string environmentVariable, string variableValue){	try	{		// Get the write permission to set the environment variable.		EnvironmentPermission environmentPermission = new EnvironmentPermission(EnvironmentPermissionAccess.Write,environmentVariable);		environmentPermission.Demand(); 		return SetEnvironmentVariable(environmentVariable, variableValue);	}	catch( SecurityException e)	{		Console.WriteLine("Exception:" + e.Message);	}	return false;}
  8. Cole o seguinte código no método Main para definir uma variável de ambiente:
    // Create a sample environment variable and set its value (for the current process).SampleSetEnvironmentVariable.SetEnvironmentVariableEx("TESTENV", "TestValue");
  9. Cole o seguinte código para exibir o valor da variável de ambiente:
    // Verify that environment variable is set correctly.Console.WriteLine("The value of TESTENV is: " + Environment.GetEnvironmentVariable("TESTENV"));

Exemplo de código concluída

using System;using System.Runtime.InteropServices;using System.Security;using System.Security.Permissions;namespace SetEnv{	/// <summary>	/// Summary description for Class1.	/// </summary>	public class SampleSetEnvironmentVariable	{// Import the kernel32 dll.[DllImport("kernel32.dll",CharSet=CharSet.Auto, SetLastError=true)][return:MarshalAs(UnmanagedType.Bool)]// The declaration is similar to the SDK functionpublic static extern bool SetEnvironmentVariable(string lpName, string lpValue);		public SampleSetEnvironmentVariable()		{		}		public static bool SetEnvironmentVariableEx(string environmentVariable, string variableValue)		{			try			{				// Get the write permission to set the environment variable.				EnvironmentPermission environmentPermission = new EnvironmentPermission(EnvironmentPermissionAccess.Write,environmentVariable);				environmentPermission.Demand(); 				return SetEnvironmentVariable(environmentVariable, variableValue);			}			catch( SecurityException e)			{				Console.WriteLine("Exception:" + e.Message);			}			return false;		}	}	class MyClass	{		/// <summary>		/// The main entry point for the application.		/// </summary>		[STAThread]		static void Main(string[] args)		{			// Create a sample environment variable and set its value (for the current process).			SampleSetEnvironmentVariable.SetEnvironmentVariableEx("TESTENV", "TestValue");			// Verify that environment variable is set correctly.			Console.WriteLine("The value of TESTENV is: " + Environment.GetEnvironmentVariable("TESTENV"));		}	}}
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo.
Referências
Para obter mais informações, visite os seguintes sites da Microsoft Developer Network (MSDN):
Ambiente System.Environment DllImport

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 829145 - Última Revisão: 12/03/2007 18:48:29 - Revisão: 3.5

Microsoft .NET Framework 2.0, Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005applies kbvs2005swept kbprb kbenv kbcominterop KB829145 KbMtpt
Comentários