次のコードがACプログラムから実行されたときに、「'bcdedit'は内部コマンドまたは外部コマンドではありません」を返す理由がわかりません。bcdeditはcmd行で完全に正常に動作します。どうすればこれを機能させることができますか?
#include <stdio.h>
int main ()
{
system("bcdedit");
system("TIMEOUT /T 3");
return(0);
}
次のコードがACプログラムから実行されたときに、「'bcdedit'は内部コマンドまたは外部コマンドではありません」を返す理由がわかりません。bcdeditはcmd行で完全に正常に動作します。どうすればこれを機能させることができますか?
#include <stdio.h>
int main ()
{
system("bcdedit");
system("TIMEOUT /T 3");
return(0);
}
これは、Command Prompt
[スタート] メニューまたは [実行] ウィンドウから実行すると、cmd
にある 64 ビット バージョンが実行されますが、C プログラムから呼び出すと、 にある 32 ビットC:\Windows\System32\cmd.exe
バージョンが呼び出されるために発生します。これは、C コンパイラが 32 ビット アプリケーションを生成するために発生します。cmd
cmd
C:\Windows\SySWOW64\cmd.exe
MSDNによると:
%windir%\System32 ディレクトリは、64 ビット アプリケーション用に予約されています。ほとんどの DLL ファイル名は、64 ビット バージョンの DLL が作成されたときに変更されていないため、32 ビット バージョンの DLL は別のディレクトリに格納されます。WOW64 は、ファイル システム リダイレクタを使用してこの違いを隠します。
ほとんどの場合、32 ビット アプリケーションが %windir%\System32 にアクセスしようとすると、アクセスは %windir%\SysWOW64 にリダイレクトされます。
ソース: http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187%28v=vs.85%29.aspx
両方を比較cmd
すると、それらが同一であることがわかります。異なるのは dll です。
問題は、Windows x64 がフォルダーに 64 ビットbcdedit.exe
を提供するが、どこにもSystem32
32 ビットを提供しないことです。そのため、32 ビットは 64 ビットを実行できないため、このコマンドが無効であることを返します。bcdedit.exe
cmd
bcdedit
解決策: Windows x86 バージョンから32 ビットを入手することもbcdedit
、64 ビット アプリケーションをコンパイルすることもできます。
実行可能ファイルが見つからないことが原因である可能性があります。パスが正しいことを確認するか(a)、フルパス名を使用します。
system ("c:\\windows\\system32\\bcdedit.exe");
そしてもちろん、これは言うまでもありません。管理ユーザーとして実行するようにしてください。
(a)次のような方法でこれを確認できるはずです。
system ("path");
1つのコマンドを2つの部分に分割したと思います。また、「bcdedit.exe / timeout 3」を実行したいと思いますが、システムコマンドの引数を2つの部分に分けます。1つは「bcedit.exe」、もう1つは「 / timeout3"。私はあなたがこれを書くべきだと思います
system("bcdedit.exe /timeout 3");
必要なコマンドを実行します。これがお役に立てば幸いです。