Delphi Tips 
-----------------------------

キーワード:配布

>> Index

10/15 EXE ファイルのスリム化
06/25 Install Shield Express でアンインストール時にレジストリを削除できない
08/25 ComCtl32.DLL を配布するには
09/15 Install Shield でアンインストール時にレジストリが掃除されない
02/08 DDeClientConv を使ってスタートメニューにアイコンを登録
02/08 Internetコンポーネントが他のマシンで動かない

最終更新: 4686 日前

0302  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2000/06/01 osamu rev 1.4
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2005/10/15 nameless <> 編集
EXE ファイルのスリム化

.exe ファイルを圧縮しておき、実行時に自動的に解凍することで、.exe ファイルを小型化することの出来るソフトがいくつか出回っています。フリーソフトでは ezip, upx、商用ソフトでは aspack というものが有名なようです。

ezip>
        http://web.archive.org/*/http://www.jonathanclark.com/ezip/ezip.exe

upx>
    http://upx.sourceforge.net/

aspack>
    http://www.entechtaiwan.com/aspack.htm

圧縮ではなく、W32 PE EXE ファイルのの 'reloc' セクションを削除してしまう方法もあります。reloc が無くても EXE はメモリー空間に Windows のローダがチャンと割り付けてくれます。(DLL は削除してはいけません)

StripReloc>
    http://www.jrsoftware.org/striprlc.htm
参照: <開発環境> <アプリケーション>

0335  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2003/06/25 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2003/06/25 osamu 編集
Install Shield Express でアンインストール時にレジストリを削除できない

>  Delphi3.1に付属の InstallShield Express にてインストール時
> に設定したキーをアンインストール時に掃除させようとしているの
> ですがうまくいきません。(キーが全く削除されない)

私もキーが削除できなくて困った経験があり、何かのショー(忘れました)で、インストールシールドをデモしているブースがあったので、聞いてみたところ、Delphi付属のInstallShieldでは「出来ません」という簡単な回答でした。
では、どうすればよいかと尋ねたところ、Professional版(有料)を購入し、自分でプログラミングしてください、ということでした。(ほかにもいろいろな機能を持っているそうです)
参照: [Delphi-ML:32275] <開発環境>

0158  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/11 osamu rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2000/08/25 ITO, Sakuya 編集
ComCtl32.DLL を配布するには

Delphi4 で作成した ComCtrl32.DLL のバージョンに依存するプログラムに ComCtl32.DLL を添付して配付すると MS の EUL に違反します。CDに入ってる 40comupd.exe を添付すれば問題はないです。

インストーラを利用する場合は /q をオプションにつけて呼び出すとMicrosoft の承諾文章が出ませんがその場合の注意点なんてのもあるので詳しくは Microsoft のサイトの EUL を読んでください。

# まあ、Win95/Win98, WinNT で ComCtl32.DLL に互換性ないし
# ComCtl32.DLL を含めて配付できたとしても面倒ですね。

//2000.08.25 by Sakuya ITO 
その時点で最新のComCtl32.DLLの配布用インストーラ ??comupd.exe は、Microsoftの次のURLからダウンロードできます。これ1本で日本語を含む各国言語に対応しています。
http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp
参照: [Delphi-ML:30766] <Windows>

0255  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/15 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/09/15 osamu 編集
Install Shield でアンインストール時にレジストリが掃除されない

Install Shield で作ったアンインストーラは、元々有ったレジストリのキーは削除しないようにできています。

したがって、同じソフトをアンインストールしないで、2度続けてインストールすると、

 1 最初のインストールで、キーを作る。
 2 2回目のインストール時に、キーが既に有るので、
   「これは、元々有ったキーに値を設定するのだな」と認識される。
 3 Unistall Shield が起動したときに、1で作ったキーは
   2で「元々有ったキー」と認識されているので、削除されない。

という風になってレジストリの情報が残ってしまうみたいです。バージョンアップの配布などでは何か策を講じる必要がありそうですね。
[Delphi-ML:32250] の質問の原因がこれかどうかはちょっと疑問
参照: [Delphi-ML:32315]

0105  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
DDeClientConv を使ってスタートメニューにアイコンを登録

3.1 のプログラムマネージャのときと同じですね。
DDEClientConv をフォームに置いて以下のようにします。

var strGroup:String;
    strExeName:String;
    strPrgName:String;
    Temp:String;
begin
    strGroup   := 'グループ名';
    strPrgName := 'ソフト名';
    strExeName := Application.ExeName;

    if not DDEClientConv1.SetLink('PROGMAN','PROGMAN') then begin
        ShowMessage('ショートカットの制作に失敗しました。');
    end else try
        {グループの作成}
        Temp := '[CreateGroup(' + strGroup  + ')]';
        DDEClientConv1.ExecuteMacro(PChar(Temp),False);

        {グループの表示}
        Temp :=  '[ShowGroup(' + strGroup  + ',1)]';
        DDEClientConv1.ExecuteMacro(PChar(Temp),False);

        {アイテムの作成}
        Temp :=  '[AddItem("' + strExeName + '","' + strPrgName + '")]';
        DDEClientConv1.ExecuteMacro(PChar(Temp),False);

        ShowMessage('ショートカットを作成しました。');
    finally
        DDEClientConv1.CloseLink;
    end;
end;
参照: [Delphi-ML:21012] <その他Windows関連> <ShellApi> <Windows> <スタートメニュー>

0036  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
Internetコンポーネントが他のマシンで動かない

Delphiに付属のftpなどのInternetコンポーネントはOCXとして実装されているので、アプリケーションの配布時にOCXもいっしょに配布してやる必要がある。
必要なファイルは、http://www.niftyserve.or.jp/forum/fdelphi/faq/00025.htmにまとめられているので、これらを Install Shield を使って配布することになる。
やり方は、Nifty Serve の FDELPHI、12番会議室の発言番号 01382 に詳しく書かれたとのことで、濱野@MICさんが[Delphi-ML:18991]で引用して解説なさってます。

ispとinstallをキーにして過去ログを検索するといろいろな情報を集めることができる。
http://leed.t.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi

これを嫌って、DSPなどにあるTCI/IP Component Pack(ファイル名:tcpip.zip)などのフリーのコンポーネントを使う方を好む人も多い。
参照: [Delphi-ML:7327] [Delphi-ML:18991]

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords

Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp