ランチャー(ショートカット)プログラムの作成

特定のソフトウェアで、特定のファイルを開かせる(役割としてはショートカットと同じ)ようなソフトウェアを作るための記事、もとい、リンク集です。そんな需要があるのかな

言語:C、C#

~作ろうと思った経緯(前置き)~
あるソフトウェアで作った自分のプロジェクトファイルを配布するとき、そのソフトウェアを同封し、クリック一つで、プロジェクトファイルを同封したソフトウェアで開くようにしたかった。

わかりにくいですね。

具体的に言いますと、Blenderというゲームを作れるソフトがあるのですが、Blenderには実行ファイル(exe)の書き出し機能はあるものの、現時点の完成度はいまいちなので、Playerソフト(BlenderPlayer)で製作したプロジェクトファイル(ゲーム)を開いてもらうのが無難なのです。操作としては、作成したプロジェクトファイル(blendファイル)をPlayerソフト(BlenderPlayer.exe)にドラック&ドロップすることで、ゲームがスタートします。そこを1クリックでゲームを始められるようにしたかった、ということです。

あと、プロジェクトファイルには独自のアイコンをつけることは出来ませんから、実行ファイルにすることで、自作のアイコンにして、オリジナル感を出したかった。

さらに、exeファイルでゲームを出力すると、Blenderの仕様上、dllファイル等のファイルをexeファイルと同じフォルダにたくさん置かなければならならず、フォルダ内がゴチャゴチャしてしまうので、それらをサブフォルダに追いやって、すっきりさせたかった。

要は、Windowsのショートカットと同等のことがしたかったのだけど、ショートカットは相対パスで指定することが出来ません。ただ、バッチファイルを使ったり、そういうフリーソフトを使ったりで出来ないことはないようです。
参考:ショートカットを相対パスで指定する(http://d.hatena.ne.jp/foohogehoge/20081020/1224480568

です、が、オリジナルアイコンで配布したいじゃないかー

っと、配布するものも無いのに、そういう妄想にかきたてられたので試しました。ふー、長い前置きでしたね。。。



方法


Visual Studio、C# .NETを使ってC#で作る方法と、Borland C++ Compiler(以下BCC)、CPadを使ってCで作る方法を記載してます。(追記:GCCでもやってみました)
C#で作る
Cで作る(Borland C++ Compiler)
Cで作る(MinGW GCC)(追記)

C#でつくる

開発環境は元々持っていたVisual Studioです。簡単です。が、Visual Studioはそれだけで何ギガもハードディスクを消費するソフトですから、今後使う予定がないのにインストールするのもどうかとも思います。

手順

・Visual Studioのインストール
・プロジェクトの作成
・ソースコードの記入
・アイコンを設定し、コンパイル


Visual Studioのインストール


Visual Studio のインストール
http://msdn.microsoft.com/ja-jp/library/vstudio/e2h7fzkw.aspx


プロジェクトの作成

下記の「はじめて触れるC#」に従いプロジェクトを作成します。種類はコンソールアプリケーションでいいと思います。コンソール画面はパッと一瞬見えるだけですが、気になる場合は「コマンド・プロンプトを表示しないコンソール・アプリケーションを作成するには?」に従い、Windows アプリケーションにします。

はじめて触れるC#
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_001/cs2_001_01.html

コマンド・プロンプトを表示しないコンソール・アプリケーションを作成するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/837nodisplayconsole/nodisplayconsole.html


ソースコードの記入

ソースコードは下のようにします。プロジェクト名はConsoleApplication1としてます。
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Process.Start("app\\blenderplayer.exe", "data\\game.blend");
}
}
}

app\\blenderplayer.exe  ・・・起動したいソフト
data\\game.blend   ・・・開きたいファイル

この2つは任意に変更してください。
この場合では、ランチャプログラムと同じフォルダにappのフォルダに同封するソフトウェアをいれ、dataフォルダに開きたいファイルを入れています。
up_20121125155511.jpg


アイコンを設定し、コンパイル

下のURLに従い、アイコンを設定し、コンパイル(ビルド)します。すると
ConsoleApplication1\bin\Release
に独自アイコンの表示になっているConsoleApplication1.exeが出来ているはず。これで完成です。

.NET TIPS アプリケーションに独自のアイコンを設定するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/385appicon/appicon.html



Cでつくる(Borland C++ Compiler)


手順

・コンパイラーのインストール
・開発環境(CPad)のインストールと設定
・ソースコードの作成
・ソースコードをコンパイル
・アイコンファイルと結合


コンパイラーのインストール

コンパイラーには Borland C++ Compiler (BCC)を使いました。
下記のURLから、ユーザー登録して無料利用できます。
http://www.embarcadero.com/jp/products/cbuilder/free-compiler

インストールはこちらを参考に。

Borland C++ Compiler 5.5をインストールする
http://www.chem.scphys.kyoto-u.ac.jp/nonnonWWW/ogawara/lecture/borland.html


開発環境(CPad)のインストールと設定

開発環境はなくてもできますが、あった方が楽です。ここではお手軽感のある CPad for borland c++compiler(BCPad)を使います。BCPadは、送金義務のないシェアウェアです。

きときと-Cpad
http://hp.vector.co.jp/authors/VA017148/pages/cpad.html
10分ではじめるBCC
http://hp.vector.co.jp/authors/VA017148/pages/install/bcc.html

ソースコードの作成

test.cppを新規作成して(名前は任意)、以下のソースを記入します。
#include <stdio.h>
#include <windows.h>

int main(void){
char program[] = "app\\blenderplayer.exe data\\game.blend";

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

CreateProcess( NULL,
program,
NULL,
NULL,
FALSE,
0x00000030,
NULL,
NULL,
&si,
&pi
);

return 0;
}

app\\blenderplayer.exe  ・・・起動したいソフト
data\\game.blend   ・・・開きたいファイル

この2つは任意に変更してください。
この場合では、ランチャプログラムと同じフォルダにappのフォルダに同封するソフトウェアをいれ、dataフォルダに開きたいファイルを入れています。
up_20121125155511.jpg


ソースコードをコンパイル

BCPadの「実行」ボタンをクリック。すると同フォルダにtest.exeが生成されているはず。これで一応、目的の動作はしてくれます。


アイコンファイルと結合

アイコンの画像データ等、プログラムにくっつけるデータを「リソース」と呼びます。下記のURLの手順でリソースファイルをコンパイルして、exeファイルに結合させます。
といっても、リンク先は難しくて意味が分からないので、最低限の手順だけ書くと

○ アイコンファイルを準備 test.ico

○ test.rcというファイル(リソーススクリプト)を作成して、以下を記入
KITTY ICON DISCARDABLE "test.ico"

○ BCPadのコマンドラインから以下のコマンドを実行
brc32 test.rc test.exe


何事もなければ、test.exeがオリジナルアイコンに変更されているはず!

リソース
http://wisdom.sakura.ne.jp/system/winapi/win32/win72.html

できなかったら
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1071946385


brc32がうまく出来ない場合は、test.cppをコンパイル(test.obj,test.exeが出来てるのを確認)後に、以下の2つこのコマンドを上から順に、BCPadのコマンドラインから試してみてください。
brcc32 test.rc
ilink32 test.obj c0x32.obj, , , cw32.lib import32.lib,,test.res


それで出来なければ、おとなしくVisual Studio等の統合開発環境を使いましょう。


注意

なんと自分で作ったこのソフト、Avast先生にマルウェアの疑いをかけられ、さらに、Cの方に至ってはAvira先生にウィルス警告を出されましたorz
よって、配布する場合は問題があるような気がします。


初めて鳴った警告アラートが自分の作ったプログラムとは・・・、やれやれだ T_T

追記:最近(2013/8)実行しても、先生たち怒らなくなった。何だったのか。


追記:


Cで作る(MinGW GCC)

Avast先生は新しいプロセスを生成するプログラムに対して怪しむ(C#、C両方に対して実行時に注意)ようで、どうしようもないような気がするのだけど、BCCで生成した方では、Avira先生は、リソースを結合する前のexeに対しては警告せず、リソースを結合した時点で警告します。

と言うことは、BCCのコンパイルに対して誤認識していると考えられたので、他のコンパイラを試すことにしました。

とりあえず、MinGWのGCCコンパイラで、コンパイルしてみました。先に結果を言いますと、Avira先生には叱られなくなりました。Avast先生には相変わらず、注意を促されますが。

MinGWのインストール

以下のURLからインストーラーをダウンロードしてインストールします。

MinGW - Minimalist GNU for Windows
http://sourceforge.net/projects/mingw/files/

インストール時にパッケージを選択しますが、Cコンパイラーだけでオッケーです。


ソースコート及びリソーススクリプト作成

ファイル名はそれぞれ、test.c、test.rcとし、中身はBCCの時と同じなので省略します。


コンパイル&リソース結合

バッチファイルでいっぺんにやっちゃう。

compile.bat
::パスの設定
set PATH=D:\__PATH__\MinGW\bin
::リソースのコンパイル
windres test.rc -O coff -o test.res
::コンパイル&結合
gcc test.c -o test.exe test.res


これで、オリジナルアイコンのtest.exeが生成されているはず。

とりあえず、Avira先生には怒られなくなりました。
関連記事

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿

非公開コメント

このブログについて
□ ブログ内容
決まった趣旨はありません。
興味を持ったこと・日常で行ったことを何でも書きます。

3DCG・プログラミングなどが多めです。

□ 現在の活動
・ウェブサイト制作
 (http://tiblab.net)
・3Dゲーム制作
 (コックパニック)
検索フォーム
ユーザータグ

Blender キャプチャ blendファイル BGE Python GameEngine ムービー Android CG  Red5 Terragen C# C++ 

カテゴリー
プロフィール

TiBra

Author:TiBra
趣味でCG制作、プログラミング等を行っています。メイカーズに憧れています。

ネットを通じた交流を広げたく思っていますので、コメント・メールはお気軽にどぞー

戯言程度のことは、こちらのブログに投稿しています。基本戯言なので、実質移転しているようなものです。

Mail:tibraあっとlive.jp
HP:TibLabmemocode
動画:VimeoFC2動画ニコニコ
ファイル:SkyDrive
企画:3Dゲーム作業実況

Blogリンク
不都合がございましたらご連絡ください。
当ブログのリンクバナー
FC2 ID
FC2カウンター
RSSフィード+解析コード