2012-02-23 19 views
4

非管理者権限で実行されるアプリケーションのVB6コードから永続的なユーザー環境変数を設定するにはどうすればよいですか?永続的なユーザー環境変数を設定するにはどうすればよいですか?

私はSetEnvironmentValueを知っていますが、これは明らかに私のニーズにとって不十分な現在のプロセスのためにvarsを変更するだけです。

環境変数がHKLMレジストリに格納されている可能性があるため、私のアプリケーションを実行している管理者以外のユーザーがenv varを設定できないことが懸念されます。

+0

管理者権限を持たないシステム全体の変数を設定することはできません。可能であれば、悪意のあるアプリがシステムのPATH変数を無効にしたり、標準のシステムDLLの代わりに独自の悪意のあるDLLを強制的に読み込んだりするのは簡単です。ほとんどの場合、現在のユーザーの変数を設定できます。 –

+0

@MarcB:システム環境変数ではなく、ユーザー環境変数について説明しています。現在のプロセスの範囲を超えて設定する方法はありますか? – CJ7

答えて

2

現在のユーザーの場合、環境変数は/HKEY_CURRENT_USER/Environmentに格納されます。昇格された権限は必要ありません。

+0

私はVB6に錆びていますが、この回答は役に立ちます:http://stackoverflow.com/a/492000/119549 – Jacob

+0

変更はいつプロセスから見えるでしょうか? – CJ7

2

VB6 guru Karl Petersonは、ユーザーまたはシステム環境変数の設定を処理するための再利用可能なモジュールを作成しました。 2009年のVisual Studio Magazineのhereを参照してください。Direct link to code

+0

そのリンクはフォルダに関するもので、env varsではないようです。 – CJ7

+0

@CraigJ間違ったリンクを貼り付けたはずです今すぐやってみて下さい。 – MarkJ

+0

このコードに問題があると思われますか?特に、SendMessageTimeoutコールは、非常にロックされた環境で管理者以外のユーザーによって実行されていますか? – CJ7

0

私はこの手軽なクラスを書いたことがあります。

http://www.vbrad.com/pf.asp?p=Source/src_environment.htm

+0

私は、SendMessageTimeout関数を使用した後でさえ、アプリケーションによって表示されるユーザenv varへの変更に対して、自分のアプリケーションを再起動する必要があることを発見しました。それは期待される行動ですか? – CJ7

+0

@CraigJそれは理論的にはうまくいきません。あなたのアプリは放送をしているアプリと同じユーザーの下で動作していますか?また、私は10年以上前にそのコードを書きました。 – AngryHacker

関連する問題