HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0723
K'Hインストーラ―を作りたい18未解決


K'H

リンク

2012/7/23(Mon) 21:59:12|NO.47857

hspでインストーラ―を作りたいのですが、以下の事がわかりません。
1,exeファイルや、dllファイルの埋め込みかた
2,1で埋め込んだファイルのコピーの仕方
3,フォルダ選択と2の操作を選んだフォルダにする方法
4,レジストリに新規キーを追加する
5,プログレスバーの表示(多分要らないと思うけど一応)
が今のところ分かりません。
教えてください。



この記事に返信する


GrapeColor(DION)

リンク

2012/7/23(Mon) 22:48:30|NO.47860

3番までは自力でできるんじゃない?
1つアドバイスすると埋め込むときは圧縮ファイルにまとめて埋め込んだほうが良いよ

展開の手順は
埋め込まれたファイルをインストーラー直下にbcopy命令でコピー⇒コピーしたファイルをその場で展開⇒展開されたファイルを各ディレクトリにbcopy命令でコピー⇒展開に使った残骸をdelete命令で削除

実行ファイルに展開するファイルを埋め込む方法は、
#pack "ファイル名"
とすればコンパイル時に格納されます。

参考になりそうなURL
http://hspnext.com/hspkura/hspkura06.htm#contents07
http://lhsp.s206.xrea.com/hsp_file.html#5

4番以降は私は知りません・・・無知で申し訳無いです・・・。



Cookies

リンク

2012/7/23(Mon) 23:56:21|NO.47870

なんとHSP Document Libraryで
「プログレスバー」とか「レジストリ」、「フォルダ選択」で検索するだけででてきちゃう!

しかもgoogleっていうもので
「hsp プログレスバー」「hsp レジストリ」「hsp フォルダ選択」で文句なしの情報がたくさん!



もし検索を既にしていて、それでわからなかったんなら
参考にしたページとかわからない箇所とか書いてみてください。



cats

リンク

2012/7/24(Tue) 18:43:00|NO.47894

>1,exeファイルや、dllファイルの埋め込みかた
スクリプトのあるフォルダと同じ所に埋め込みたいファイルを置き、スクリプトの最初に

#epack "ファイルA" #epack "ファイルB"
と書く。
>2,1で埋め込んだファイルのコピーの仕方

bcopy "ファイルA","インストール先フォルダ\\ファイルA" bcopy "ファイルB","インストール先フォルダ\\ファイルB"
のように書く。
>3,フォルダ選択と2の操作を選んだフォルダにする方法
これはとりあえずここらへんを参考に。
http://hspnext.com/hspkura/hspkura06.htm#contents07
>4,レジストリに新規キーを追加する
hspextなどを使う。(自分は「hsp regModule」で検索して出てくるのを使っています。)
>5,プログレスバーの表示(多分要らないと思うけど一応)
http://lhsp.s206.xrea.com/hsp_object8.html#1



@key

リンク

2012/7/24(Tue) 18:58:46|NO.47895

インストーラーを作るならHSPで自作するのではなくwindowsインストーラーや
フリーのインストーラー作成ツールを使ったほうがいいと思います



K'H

リンク

2012/7/24(Tue) 22:35:29|NO.47911

@keyさん
フリーのインストーラー作成ツールは持っているのですが、
どうしても宣伝が出るので、自分で作ろうと思いました。



cats

リンク

2012/7/25(Wed) 14:42:10|NO.47928

インストーラは作ったことがあるけどアンインストールの方が難しかった。



@key

リンク

2012/7/25(Wed) 16:21:32|NO.47929

 http://codezine.jp/article/detail/428
windwosインストーラ(拡張子msi)が定番でいいと思うけどかなり難しそう

あとインストール系の物は個人的にあまり好きではない
簡単にダウンロードしてすぐ使えて、
いらなくなったらフォルダごと削除でOKっていうのがいいと思う



K'H

リンク

2012/7/25(Wed) 20:08:00|NO.47935

質問です。
txtファイルは#epackで埋め込めますが、
exeファイルは、実行ファイル作成で、エラーが起こります。
何ででしょう?



cats

リンク

2012/7/26(Thu) 21:32:44|NO.47951

>exeファイルは、実行ファイル作成で、エラーが起こります。
エラーの内容は何ですか?



K'H

リンク

2012/7/29(Sun) 18:23:26|NO.48029

すみません。
自己解決しました。



K'H

リンク

2012/7/29(Sun) 18:47:31|NO.48030

すみません。(以下コピペ)

;***** フォルダ選択ダイアログ表示 (comobj20.hsp) ***** newcom ShellApp, "Shell.Application" sdim Folder,260 objFolder=ShellApp("BrowseForFolder",hwnd,"フォルダの選択",0,dirinfo(1)) ;▼キャンセルの場合 if varuse(objFolder)==0 { dialog "キャンセルされました。",0,"フォルダの選択" ShellApp = 0 objFolder = 0 stop } ;▼OKの場合は、選択されたパス名を取得する objItems=objFolder("Items") : objItem=objItems("Item") Folder=objItem("Path") ;▼取得したフォルダ名を表示 mes Folder ;▼オブジェクト変数の解放 objFolder=0 objItems =0 objItem =0 ShellApp =0 stop *owari ;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか判定 if vartype(objFolder)==6 { if varuse(objFolder)==1 : objFolder = 0 } if vartype(objItems)==6 { if varuse(objItems)==1 : objItems = 0 } if vartype(objItem)==6 { if varuse(objItem)==1 : objItem = 0 } if vartype(ShellApp)==6 { if varuse(ShellApp)==1 : ShellApp = 0 } end
だと上手くいきますが、

;***** フォルダ選択ダイアログ表示 (foldialog.hsp) [ API版 ] ***** #module ;▼必要となるAPIや定数の定義 #uselib "shell32.dll" #func SHGetPathFromIDList "SHGetPathFromIDList" int,int #func SHBrowseForFolder "SHBrowseForFolderA" int #uselib "ole32.dll" #func CoTaskMemFree "CoTaskMemFree" int #uselib "user32.dll" #func SendMessage "SendMessageA" int,int,int,int #deffunc foldlg str prm1,str prm2,int prm3 ;******************************************************************************* ; フォルダ選択ダイアログ (foldlg) ; ; 戻り値 : 成功 stat=0, refstr=選択フォルダ名,失敗, stat=1 ; ; ・書式 foldlg dlgtitle,deffolder,nOption ; ・引数 dlgtitle (str) : ダイアログタイトル名 (省略可) ; deffolder (str) : 初期フォルダ名 ; nOption (int) : 0,1,$400(0) スタイルオプション値 ;******************************************************************************* mref ref,65 ls=strlen(prm1) dlgtitle = prm1 if ls==0 : dlgtitle="フォルダを選択して下さい" sdim deffolder,260 deffolder = prm2 if strlen(deffolder)==0 : deffolder=exedir nOption = prm3 ;(0,1,$4000) if (nOption!0)|(nOption!1)|(nOption!$4000) : nOption=0 dim browsinfo,64 : sdim retbuf,260 browsinfo(0) = hwnd browsinfo(3) = varptr(dlgtitle) browsinfo(4) = nOption ;BrowseCallback ;初期フォルダ指定可能 ; if deffolder!="" { dim brproc, 9 browsinfo(5)=varptr(brproc) : browsinfo(6)=varptr(deffolder) p=varptr(SendMessage) brproc = $08247C83, $90177501, $102474FF, $6668016A, $FF000004 brproc(5) = $B8102474, p, $C031D0FF, $000010C2 } SHBrowseForFolder varptr(browsinfo) : pidl=stat SHGetPathFromIDList pidl,varptr(retbuf) : pidl=stat CoTaskMemFree pidl ref=retbuf : ls=strlen(retbuf) if ls==0 : ret=1 : else : ret=0 dim browsinfo,0 : sdim retbuf,0 : sdim deffolder,0 return ret #global ;***** sample ***** foldlg "",dir_exe,0 if stat=1 : stop color 0,0,255 : pos 20,10 : mes refstr stop
だと途中で動作が止まります。
何故でしょう?
長文失礼しました。



GrapeColor(DION)

リンク

2012/7/29(Sun) 21:41:39|NO.48032

>>K'Hさん
試した見ましたがどっちも動きましたよ?
ただ、フォルダの一覧を表示するときの処理は結構重いので低スペPCだと固まるかもしれませんね。



K'H

リンク

2012/8/1(Wed) 01:44:23|NO.48070

>>GrapeColor(DION)さん
出来たんですか。
僕のpcが低スペなだけかな?



K'H

リンク

2012/8/1(Wed) 05:14:06|NO.48072

ファイルをコピーするときは、
フォルダ名の変数を仮にaaaとして、


bcopy aaa+"\\ファイル名"

でいいんですか?



cats

リンク

2012/8/1(Wed) 22:52:42|NO.48082

>ファイルをコピーするときは、
>フォルダ名の変数を仮にaaaとして、
>bcopy aaa+"\\ファイル名"
>でいいんですか?
それでいいですけど自分で試してみてはどうですか?



K'H

リンク

2012/8/6(Mon) 17:42:07|NO.48175

すいません。
作ったインストーラ―を、エディタからF5で実行するとうまくいきますが、
実行ファイル作成で作ったファイルはエラーが発生します。
エラーの内容は、
#12
内部エラーが発生しました。
です。

関係ないかもしれないですけど、
実行ファイル名が 〜Setup
だったら、アイコンが変わります。何故でしょう?



mamo

リンク

2012/8/6(Mon) 18:18:26|NO.48177

まずは「内部エラー12」で検索。



K'H

リンク

2012/8/6(Mon) 20:46:18|NO.48180

ありがとうございます。
出来ました。



ONION software Copyright 1997-2023(c) All rights reserved.