とっちゃんです。
Post by sunfishPost by ã¨ã£ã¡ããもしくは、自前のEXEだが、コンソールアプリということでしょうか?
後者です。
Post by ã¨ã£ã¡ããそのため、コンソールアプリは必ずコンソールが表示されてしまうことになります。
ありゃあ。やっぱりそうですか。
Post by ã¨ã£ã¡ãã・実行したいコマンドと同じ機能を持つGUI形式のEXEを作成し、それを呼び出す。
・ラッパーのDLLまたはEXEを用意して(EXEの場合はGUI形式)
そこから CreateProcess で実際のコマンドを非表示で呼び出す。
後者はVBScript と同じことをDLLやEXEで実現するというだけです。
なるほど。
ということは、あれですか、VBScriptを使うにしても上記の方法をとるにしても
EXEはいったんインストールしないと実装不可ということですかね。
自作モジュールであれば、GUI形式に作り直すことでインストールせずに
呼び出すことが可能(なはず)です。
また、ラップする場合でも、自分でバイナリテーブルから展開してEXEを実行
とすれば、インストールしないでも利用が可能です。
ただし、どちらの場合でも、処理終了後に展開された一時ファイルを削除する
必要があるので、必ず終了待ちする必要があります。
開発コストと天秤にかける必要がありますね(^^;
一応、選択肢を書いておきます。
新規追加分
・GUIアプリとして作り直す。
この場合は、設定などが面倒ですので、一度GUIアプリのプロジェクトを起こし、
元のコンソールから、main関数以外を全部持ってきて、main関数のみ
WinMain の形式に変更します。
・ラッパーを用意する。
あらかじめインストールしたくない場合は、ラッパーの中から自分で
バイナリテーブル(別テーブルでも良いですが、ここが一番ローコスト)から
テンポラリに展開し、そのEXEを直接呼び出します。
ただし、この場合は、EXEの終了を待ち、終了したら展開したバイナリファイルを
自分で削除する必要があります(インストーラのあずかり知らぬ動作のため)。
--終了待ち動作について--
EXEを呼び出す場合は、常に動作が非同期になるため、終了待ちをしない場合は、
インストールするか、ソースメディア上に事前配置するか(インストーラパッケージと
一緒に配布)のどちらかしか選択肢がありません。
これは、原則的にはラッパーを使っていてもいなくても一緒です。
インストールしない&&終了待ちしないという条件を成立させるためには
ソースメディア上に配置するしか選択肢がないため、.msi と一緒に(同じフォルダか
またはサブフォルダに)配布する必要があります。
ただし、この場合は、インストール中にメディアが交換されない(CD配布など)という
条件が必要になります。
配布条件が面倒になるので、終了を待ちたくない場合は、インストールしてしまうほうが
手間が軽減できると思います(ファイルの存在チェックなども不要なため)。