[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/05/29(Tue) 19:14
投稿者名:ヨシ
Eメール:
URL :
タイトル:
SetEnvironmentVariable
お世話になります。

現在VB6で開発中です。
SetEnvironmentVariableを使用して環境変数を設定したいのですがうまく行きません。
下記のように記述しております。
OSはXP Proです。

定義文
Public Declare Function SetEnvironmentVariable Lib "kernel32.dll" Alias "SetEnvironmentVariableA" (ByVal envname As String, ByVal envval As String) As Long

実行文
retCode = SetEnvironmentVariable("TestName", "TestVal")

ご存知の方いらっしゃいましたら教えてください。よろしくお願いいたします。

投稿時間:2007/05/30(Wed) 02:42
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: SetEnvironmentVariable
> うまく行きません。
具体的には、どうなってしまうのでしょう?

> SetEnvironmentVariable
この関数は、実行したプロセス内でのみ有効で、システム環境変数や他のプロセスの環境変数には
影響を及ぼしませんが、その点は大丈夫ですよね?
http://msdn.microsoft.com/library/ja/jpdllpro/html/_win32_setenvironmentvariable.asp

投稿時間:2007/05/30(Wed) 09:49
投稿者名:ヨシ
Eメール:
URL :
タイトル:
Re^2: SetEnvironmentVariable
返信ありがとうございます。
VB開発経験も記述しておりませんでした。すみません。
ちょうど1年くらいになります。

> 具体的には、どうなってしまうのでしょう?

すみません。
1の値が返ってきます。
提示いただいたページでは0以外正常とありますが、
http://onegland.hp.infoseek.co.jp/wincgi/help/winerror.txt
このページでは1は「不正な関数」とあるので混乱しております。

> この関数は、実行したプロセス内でのみ有効で、
システム環境変数や他のプロセスの環境変数には影響を及ぼしませんが、
その点は大丈夫ですよね?

すみません。見落としていました。
SETコマンドの実行でも継続的な環境変数の新規登録、変更はできないようですが、
これを行う方法はありますでしょうか。よろしくお願いいたします。

投稿時間:2007/05/30(Wed) 13:07
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: SetEnvironmentVariable
> 提示いただいたページでは0以外正常とありますが、
> http://onegland.hp.infoseek.co.jp/wincgi/help/winerror.txt
> このページでは1は「不正な関数」とあるので混乱しております。

そのページで紹介されている値を使うのであれば、このような形になるでしょうね。

 Const FAILURE As Long = 0
 retCode = SetEnvironmentVariable(……)
 If retCode = FAILURE Then
  Select Case Err.LastDLLError
   Case 1
   MsgBox "不正な関数です。"
   Case 2
   MsgBox "指定されたファイルが見つかりません。"
   :
  End Select
 End If

ちなみに、これらのエラーメッセージは FormatMessage API にて取得できます。


> SETコマンドの実行でも継続的な環境変数の新規登録、変更はできないようですが、
> これを行う方法はありますでしょうか。よろしくお願いいたします。

一般的には、マイコンピュータ→プロパティ→詳細設定タブ→環境変数ボタンですね。

ユーザ環境変数でもよいのであれば、
 Dim userName As String
 'userName = Environ("UserName")
 userName = "Administrator"
 With GetObject("winmgmts:\\.\root\cimv2").Get("Win32_Environment").SpawnInstance_
  .Name = "Test"
  .VariableValue = "abcd"
  .userName = userName
 .Put_
 End With
という方法があります。


なお、環境変数を変更しても、それが即座に反映されないソフトウェアも少なくありませんので、
アプリケーション間で共有する場合、環境変数設定後は再起動を行っておくのが無難です。
これは、設定値をアプリ起動時にしか取得せず、実行中の動的書き換えに対応できていない
アプリケーションが少なからず存在するためです。

投稿時間:2007/05/30(Wed) 18:22
投稿者名:ヨシ
Eメール:
URL :
タイトル:
Re^4: SetEnvironmentVariable
ありがとうございます。

>そのページで紹介されている値を使うのであれば、このような形になるでしょうね。
なるほど。すみません、わたくしの読解力の問題ですね。ありがとうございます。

>ユーザ環境変数でもよいのであれば、、、
現在のわたくしの知識ではすぐには何をしてるか分からないので検証させて頂きたいと思います。
ありがとうございます。

また、今、レジストリから環境変数を変えられるという記述をみつけました。
http://support.microsoft.com/kb/104011/ja
これについてもこれから検証してみようと考えているところですが、
再起動が必要とご指摘いただいたので、これも適用できないかもしれません。

いろいろと足りない書き込みに対して丁寧に対応していただきありがとうございました。