
こんにちは。よろしくお願いします。
Visual Studio 2005 を使っています。
関数CreateProcessWithLogonW()への引数に
拡張子がexeやbatのファイルを渡すと実行できるのですが、
拡張子がmsiだと実行できません><
batファイルの中に
msiexec /i C:\ファイル名.msi
と記述しておいて、
関数CreateProcessWithLogonW()ではそのbatファイルを実行させ、
どうにか目的のmsiファイルを実行することは可能でしたが、
batファイルを経由せずに直接、
関数CreateProcessWithLogonW()への引数で
msiファイルを実行できる方法は無いでしょうか?
何か方法をご存知の方、同じような事をご経験された方、
アドバイスよろしくお願い致します。
No.2ベストアンサー
- 回答日時:
こんにちは。
#1さんの言われるようにWindowsAPIのShellExecute関数で実行可能かと
思われます。
下記のサンプルは、ShellExecute関数を使用した一例です。
ShellExecute関数の"open"コマンドで、実行ファイルを指定しない場合は、
開くファイルに関連付けされたアプリケーションでファイルが開かれますので
それを利用します。
■サンプルプログラム(C++版)
注1)msiファイル用のインストーラーアプリのパス名及びファイル名は、
Windows及びアプリのバージョンにより変更する必要があります。
注2)サンプルは処理系およびWindowsのバージョンにより、正常にビルド
及び実行ができない可能性があります。
注3)ソース内にはインデントのため全角スペースを入れています。
==============================
/*
* OpenMsi.cpp : Msiインストールファイルの起動テスト
*/
#include <windows.h>
#include <shellapi.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
BOOL bApp; //Shell起動の方法
// =false:関連付けで起動、=true:指定アプリで起動
HINSTANCE hInst; //インスタンス取得用
char szCmd[256]; //アプリ起動時のコマンド文字列
// msiファイル名をセット
const char szMsiFn[] =
{ "F:\\Soft\\Tools\\hogehoge.msi" };
// msi用インストーラーアプリのフルパス名をセット
const char szAppPath[] =
{ "C:\\WINDOWS\\SYSTEM\\msiexec.exe" };
// Shell起動の方法を選択
// ※コマンドラインオプションで切替え
bApp = false; //初期値をセット(関連付けで起動)
if( argc < 2 ){ //オプション指定なし
bApp = false; //関連付けで起動
}
else { //オプション指定あり
if( !strcmp(argv[1], "/1") ){
bApp = false; //関連付けで起動
}
else if( !strcmp(argv[1], "/2") ){
bApp = true; //指定アプリで起動
}
else{
cout << "オプション指定が違います。" << endl;
return 1;
}
}
// msiファイルを開く
if( !bApp ){
// 関連付けされたアプリケーションで開く
strcpy( szCmd, szMsiFn );
cout << "Shell Execute Command:\n";
cout << "=>Open " << szCmd << endl;
hInst = ::ShellExecute( NULL, "open", szCmd, NULL, NULL, SW_SHOWNORMAL );
}
else{
// 指定のアプリケーションで開く
strcpy( szCmd, "/i " );
strcat( szCmd, szMsiFn );
cout << "Shell Execute Command:\n";
cout << "=>" << szAppPath << " " << szCmd << endl;
hInst = ::ShellExecute( NULL, "open", szAppPath, szCmd, NULL, SW_SHOWNORMAL );
}
// Shell起動の可否チェック
if( (int)hInst <= 32 ){
// 戻り値が32以下の時は起動に失敗
cout << "msiファイルが開けません。" << endl;
return 2;
}
return 0;
}
==============================
以上です。上手くいかなかった場合はすみません。
参考になれば幸いです。
ファイル名.msi
では実行できませんでしたが、
msiexec /i C:\ファイル名.msi
とコマンドごと文字列で渡してみると
関数CreateProcessWithLogonW()
から実行することが出来ました!
回答いただきありがとうございました!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) フォルダ内の特定 拡張子のファイルを一括実行するBat ファイルについて 4 2022/04/17 09:51
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- その他(プログラミング・Web制作) バッチファイルでPCのモデル名を取得したい 1 2022/03/31 10:58
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- その他(プログラミング・Web制作) BATファイルについて 2 2023/07/20 20:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
EXCELバッチコマンド起動...
-
LabVIEWでEXCELファイルを操作...
-
複数のパソコン間のDir関数につ...
-
jspのエラーが修正できません。
-
Eclipseで、プロジェクト名のと...
-
eclipseでスタックサイズを変更...
-
Eclipse(JAVA)のデバッグで他...
-
Javascriptの値をJava(JSP)へ渡...
-
正しいURL指定しているにもかか...
-
eclipseのショトカットキー
-
Eclipse・プロジェクトで、フォ...
-
The requested resource is no...
-
classファイルについて
-
javaが文字コードの影響でコン...
-
JSPのクラスをコンパイルできな...
-
vs codeはオフラインでも使用で...
-
Eclipseのデバッグ機能が正常に...
-
.jarファイルの中身って書き換...
-
JAVAにのeclipseに関する質問で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBAで作成したマクロをデスクト...
-
HTMLファイルからexeファイルを...
-
Access VBAよりシート名を取得...
-
GUIアプリをコマンドラインで使...
-
VBA Application visibleの...
-
system.mdwを見つけることが出...
-
jspのエラーが修正できません。
-
EXE間で同期をとりながらデータ...
-
量子化学計算ソフト GAMESS の...
-
64ビットでのビジュアルスタイ...
-
exeファイルが実行中かどうか、...
-
別のAccessファイルのフォーム...
-
*.asp の拡張子名がついたht...
-
VB5が起動しない
-
LabVIEWでEXCELファイルを操作...
-
エラー この変数は宣言されて...
-
vb.netでフォルダをcab圧縮する...
-
ブラウザからexeファイルを起動...
-
vbsかバッチファイルでmp3を再...
おすすめ情報