環境変数の取得について – プログラミング – Home

環境変数の取得について
 
通知
すべてクリア

[解決済] 環境変数の取得について


SA
 SA
(@SA)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

たびたびこの掲示板を利用させていただいています。

早速質問のですが、環境変数の取得で困っています。

【現象】
BOOL GetCreateTempDir( CHAR* pTemp )
{
DWORD sts;
sts = ExpandEnvironmentStrings( %TEMP% , pTemp , MAX_PATH_SIZE ) ;

if ( 0 == sts )
{
return FALSE;
}
return TRUE;
}
という関数を作成して、環境変数%TEMP%を表す文字列を取得しようとしています。
この関数はDLLになっております。

ところが、あるプロセスでは正しく文字列(今回の場合、C:\Temp)がかえってきます
が、
別のプロセスでは%TEMP%のままかえってきてしまいます。

どちらのプロセスもこのDLLの呼び出し方は同じなのですが、
何故異なってしまうのか、いろいろと検討したのですが、わかりません。

どうぞ、よろしくお願いいたします。

【開発環境】
VC++6.0
WinXP

【テスト環境】
WinNT


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

ヘルプにはエラーだと復帰値が0
バッファサイズが小さいと必要なバッファサイズが復帰値として返ってくる
環境変数名が見つからないと%~%の部分はそのままで残される
と書かれていますよ

実行しているユーザは同じですか?


返信引用
汎
 汎
(@汎)
ゲスト
結合: 22年前
投稿: 43
 

ダメなプロセスは
CreateProcess 関数の
LPVOID lpEnvironment に別の環境ブロックを割り当てたというようなことではないのでしょ
うか?


返信引用
SA
 SA
(@SA)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

回答ありがとうございます。

実行しているユーザーは同じです。

あれから少し調べたところ以下の点がわかりました。

Test.exeというプロセスを作成しました。(試すためのプロセスです。)
これは実行すると環境変数(%TEMP%)から文字列を取得するようにしました。

1.このプロセスを実行すると環境変数は取得できます。
2.サービスとして登録して実行すると(%TEMP%)のままかえってきてしまいます。

ExpandEnvironmentStrings関数は名前がみつからないとそのまま返すようですが、
なぜサービスとして登録し実行した場合は名前が見つからないのでしょうか。


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

サービスはログオンしなくても実行されるからではないでしょうか


返信引用
SA
 SA
(@SA)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

そうですか。

ちなみにWindows2000ではサービスとして起動しても、
取得できました。

WindowsNTだけダメなんです。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

Windows NTでは,TEMP/TMPはユーザー環境変数として設定されています。
なのでSYSTEMアカウントでは使えないのでしょう。

TEMPをシステム環境変数で登録するか,
サービスをTEMPが使えるユーザーで動かすとよいでしょう。


返信引用
SA
 SA
(@SA)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

解決しました。回答していただいた方々、ありがとうございました。

WindowsNTについて知識不足なところがあり、
ご迷惑をお掛けしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました