[解決済み] CreateProcessWがコマンドラインを無視する [重複] 。
2022-02-07 09:44:21
質問
ユーザーが別のプロセスでアプリケーションを起動できるように、DLL内にCreateProcessWを実装しようとしています。
手始めに、理解できるまでコードにコマンドをハードコードしています。
私は
STARTUPINFO si = {sizeof(STARTUPINFO), 0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
LPCTSTR AppName=L"c:\\utilities\\depends.exe";
LPTSTR Command = L"c:\\utilities\\tee.exe";
if (CreateProcessW(AppName, Command, 0, 0, 0, CREATE_DEFAULT_ERROR_MODE, 0, 0, &si, &pi)) {
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return GX_RESULT_OK;
} else {
.. show error msg
}
これでDependsは起動しますが、Tee.exeは開きません。エラーはなく、コマンドラインパラメータが無視されるだけです。パラメータは正しく、実行プロンプトで実行しても問題なく動作します。AppNameを空白にし、Depends.exeをCommandパラメータとして指定しても動作しますが、次のように指定すると動作します。
LPTSTR Command = L"c:\\utilities\\depends.exe c:\\utilities\\tee.exe";
エラー3: "指定されたパスが見つかりません"が表示されます。
また、lpCurrentDirectoryパラメータを指定することで、同様に無視されます。
解決するには?
の中で実行ファイルを提供する必要があります。
command
-
Appname
は実行ファイルへのフルパスを含む必要があります。 -
Command
を含む必要があります。argv[0]
ファイルを開きたい場合
t.txt
をメモ帳で表示させるには、次のようにします。
-
Appname = "c:/windows/notepad.exe";
-
command = "notepad c:/temp/t.txt";
本当のプログラム名を入力する必要はなく、単なるプレースホルダーなので、偽名でもかまいません。
このように
command = "fake c:/temp/t.txt";
今、notepad.exeで。
-
argv[0] = "notepad";
-
argv[1] = "c:/temp/t.txt";
この完全な例を参照してください。
#include <Windows.h>
#include <iostream>
using namespace std;
int main(){
STARTUPINFO si = {sizeof(STARTUPINFO), 0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
LPTSTR AppName=L"C:/Windows/notepad.exe";
wchar_t Command[] = L"notepad C:/Temp/t.txt";
DWORD res = CreateProcess(AppName, Command, 0, 0, 0, CREATE_DEFAULT_ERROR_MODE, 0, 0, &si, &pi);
if (res) {
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
} else {
cerr<<"error..."<<GetLastError()<<endl;
};
return 0;
}
関連
-
[解決済み] テスト
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Enterキーを押して続行する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] 配列のベクトルを扱う正しい方法