2017-02-02 17 views
0

cmd.exeを使用して%userdomain%および%username%パラメータからUserdomainとUsernameを取得しようとしています。データを取り戻すことができます。Inno Setup - バッチファイルを起動せずにcmd.exeでコマンドを実行する

手動でコマンドウィンドウを起動して次のように入力するとうまくいきます。 echo%userdomain%\%username%> "C:\ Users \ MyUserName \ AppData \ Local \ Temp \ is-B7P3P.tmp \ domainstring_results.txt 「

.BATをバッチファイルに入れて起動

場合、それはあまりにもうまく動作します。しかし、私はExecの機能と同じことを行うならば、それだけでCMD.EXEを起動し、他に何もしない:

CommandLine := 'echo %userdomain%\%username% > "' + ExpandConstant('{tmp}') + '\domainstring_results.txt"'; 
Exec('cmd.exe', CommandLine, '', SW_HIDE, ewWaitUntilTerminated, ResultCode); 

私はバッチファイルを使用したくないインストーラの一時的なフォルダであるため、インストーラのコンパイルの前にバッチを作成することはできません。私はインストールステップの前に、この情報を必要とするので は、単にあなたがあなたの目的のために必要なデータを使用できるようにする必要がありExpandConstant('{%WindowsContantNameHere}') を呼び出してデータを取得することができます...あまりにも[ファイル名を指定して実行]セクションで

+1

私はあまりよく分かっていませんが、コマンドの前に "/ C"が必要ないのですか? –

答えて

1

することはできません。

[Code] 
function InitializeSetup(): Boolean; 
begin 
    MsgBox('User Name is: ' + ExpandConstant('{%Username}') + #13#10 + 
    'User Domain is: ' + ExpandConstant('{%Userdomain}'), mbInformation, MB_OK); 
end; 
+0

ありがとう:ExpandConstant( '{%Userdomain} \ {%Username}');私が期待していたことをやっています... – BenDev

0

GetUserNameStringGetEnv機能を使用します。

GetUserNameString() 
GetEnv('USERDOMAIN') 

は、あなたの質問に答えるために:あなたは/Cスイッチが欠落しています。 cmd.exeをハードコードする代わりに、{cmd} constantを使用する必要があります。

Exec(
    ExpandConstant('{cmd}'), '/C ' + CommandLine, 
    '', SW_HIDE, ewWaitUntilTerminated, ResultCode); 

あなたのアプローチは過剰ですが、

+0

そうですね、このアプローチはまったくうまくいきません。しかし、私はExpandConstant()でwindowsconstantを渡す可能性について知らなかった。だからExpandConstant( '{%Userdomain} \ {%Username}');私が探していたものです。 – BenDev

+0

これはより軽量な解決策になります: 'GetEnv( 'USERDOMAIN')+ '\' + GetUserNameString()' –

関連する問題