如何为当前进程设置环境变量?
2009-05-05 11:24
453 查看
最近在开发一个vss源码管理的插件,使用ss.exe命令行方式,操作源码管理库,其中需要设置ssdir环境变量,虽然可以通过,操作系统进行配置,但是不断录活,由于使用的是vs2003,.net1.1只提供获取系统变量的方法,没有提供设置系统变量的方法(.net2.0已提供),只好请出API
Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As long
注意需要把返回类型,更改为
Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Integer
以前方法只对当前进程有效。
如何设置全局的呢,在发网上发现一个例子:(vb6.0)
Windows 提供了API函数SetEnvironmentVariable,不过这个函数只能修改当前进程的环境变量,而不能修改其他进程和系统的变量。
要修改系统的环境变量,需要修改注册表SYSTEM\CurrentControlSet\Control\Session Manager\Environment下的项,然后发送WM_SETTINGCHANGE消息。 下面就是使用VB写成的例子(完整的版本请从http://www.vbrad.com/pf.asp?p=source/src_environment.htm下载):
'Note: this piece of code has dependencies on cValuePair and cValuePairs classes
Option Explicit
Private mstrEnvironment As String
Private Const REGISTRY_PATH = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Private oRegistry As Registry
Private Declare Function SendMessageTimeout Lib "user32" _
Alias "SendMessageTimeoutA" (ByVal hwnd As Long, _
ByVal msg As Long, ByVal wParam As Long, _
ByVal lParam As String, ByVal fuFlags As Long, _
ByVal uTimeout As Long, lpdwResult As Long) As Long
Private Const HWND_BROADCAST As Long = &HFFFF&
Private Const SMTO_ABORTIFHUNG As Long = &H2
Private Const WM_SETTINGCHANGE As Long = &H1A
Private mValuePairs As cValuePairs
Private Sub EnumerateVariables()
Dim sKeys() As String
Dim iKeyCount As Long
Dim x As Long
Dim oValuePair As cValuePair
Set mValuePairs = New cValuePairs
oRegistry.EnumerateValues sKeys(), iKeyCount
For x = 1 To iKeyCount
oRegistry.ValueKey = sKeys(x)
Set oValuePair = New cValuePair
oValuePair.Variable = sKeys(x)
oValuePair.Value = oRegistry.Value
mValuePairs.Add oValuePair, oValuePair.Variable
Set oValuePair = Nothing
Next
End Sub
Public Property Get Environment(ByVal strName As String) As String
oRegistry.ValueKey = strName
Environment = oRegistry.Value
End Property
Public Property Let Environment(ByVal strName As String, ByVal strValue As String)
oRegistry.ValueKey = strName
oRegistry.ValueType = REG_SZ
oRegistry.Value = strValue
BroadcastEnvironmentChange
End Property
Private Sub BroadcastEnvironmentChange()
Dim lngReturnValue As Long
SendMessageTimeout HWND_BROADCAST, WM_SETTINGCHANGE, 0&, _
"Environment", SMTO_ABORTIFHUNG, 5000&, lngReturnValue
End Sub
Public Property Get List() As cValuePairs
If mValuePairs Is Nothing Then
EnumerateVariables
End If
Set List = mValuePairs
End Property
Private Sub Class_Initialize()
Set oRegistry = New Registry
oRegistry.ClassKey = HKEY_LOCAL_MACHINE
oRegistry.SectionKey = REGISTRY_PATH
End Sub
Private Sub Class_Terminate()
Set oRegistry = Nothing
Set mValuePairs = Nothing
End Sub
Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As long
注意需要把返回类型,更改为
Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Integer
以前方法只对当前进程有效。
如何设置全局的呢,在发网上发现一个例子:(vb6.0)
Windows 提供了API函数SetEnvironmentVariable,不过这个函数只能修改当前进程的环境变量,而不能修改其他进程和系统的变量。
要修改系统的环境变量,需要修改注册表SYSTEM\CurrentControlSet\Control\Session Manager\Environment下的项,然后发送WM_SETTINGCHANGE消息。 下面就是使用VB写成的例子(完整的版本请从http://www.vbrad.com/pf.asp?p=source/src_environment.htm下载):
'Note: this piece of code has dependencies on cValuePair and cValuePairs classes
Option Explicit
Private mstrEnvironment As String
Private Const REGISTRY_PATH = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Private oRegistry As Registry
Private Declare Function SendMessageTimeout Lib "user32" _
Alias "SendMessageTimeoutA" (ByVal hwnd As Long, _
ByVal msg As Long, ByVal wParam As Long, _
ByVal lParam As String, ByVal fuFlags As Long, _
ByVal uTimeout As Long, lpdwResult As Long) As Long
Private Const HWND_BROADCAST As Long = &HFFFF&
Private Const SMTO_ABORTIFHUNG As Long = &H2
Private Const WM_SETTINGCHANGE As Long = &H1A
Private mValuePairs As cValuePairs
Private Sub EnumerateVariables()
Dim sKeys() As String
Dim iKeyCount As Long
Dim x As Long
Dim oValuePair As cValuePair
Set mValuePairs = New cValuePairs
oRegistry.EnumerateValues sKeys(), iKeyCount
For x = 1 To iKeyCount
oRegistry.ValueKey = sKeys(x)
Set oValuePair = New cValuePair
oValuePair.Variable = sKeys(x)
oValuePair.Value = oRegistry.Value
mValuePairs.Add oValuePair, oValuePair.Variable
Set oValuePair = Nothing
Next
End Sub
Public Property Get Environment(ByVal strName As String) As String
oRegistry.ValueKey = strName
Environment = oRegistry.Value
End Property
Public Property Let Environment(ByVal strName As String, ByVal strValue As String)
oRegistry.ValueKey = strName
oRegistry.ValueType = REG_SZ
oRegistry.Value = strValue
BroadcastEnvironmentChange
End Property
Private Sub BroadcastEnvironmentChange()
Dim lngReturnValue As Long
SendMessageTimeout HWND_BROADCAST, WM_SETTINGCHANGE, 0&, _
"Environment", SMTO_ABORTIFHUNG, 5000&, lngReturnValue
End Sub
Public Property Get List() As cValuePairs
If mValuePairs Is Nothing Then
EnumerateVariables
End If
Set List = mValuePairs
End Property
Private Sub Class_Initialize()
Set oRegistry = New Registry
oRegistry.ClassKey = HKEY_LOCAL_MACHINE
oRegistry.SectionKey = REGISTRY_PATH
End Sub
Private Sub Class_Terminate()
Set oRegistry = Nothing
Set mValuePairs = Nothing
End Sub
相关文章推荐
- 如何设置Android命令行环境变量
- python脚本中如何设置系统的环境变量
- 如何设置环境变量?
- 如何为crontab调度运行的多脚本设置共享的环境变量?
- Idea自带的maven插件如何设置环境变量
- MAC os 环境变量设置错误,终端命令不能用了,如何恢复?
- 如何从程序中获得/设置环境变量
- 如何永久设置linux环境变量
- windows vis c++/GetEnvironmentStrings 如何获取打开进程的环境变量字符串
- windows 如何设置环境变量
- Linux下如何设置环境变量
- 如何用命令行(CMD)编译运行C 程序—环境变量的设置
- 如何设置Java 2(JDK1.2)的环境变量?
- lua如何设置只读全局变量——通过元方法与环境
- linux 下如何查看一个进程的环境变量
- Linux系统environ环境变量 打印当前进程环境变量信息
- 如何设置JAVA环境变量
- Ubuntu12.04 如何设置环境变量
- Linux下如何设置环境变量
- 如何设置环境变量