[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1208) [AS Illustrator CS2] インストーラ



illustrator CS2のスクリプトフォルダ(ほかにもアプリケーションフォルダとか、デスクトップとか)にインストールをさせるスクリプト。
デスクトップにログも残せます。
コピー実行してるブロックで
my_duplicate(from_alias, to_alias, replacing_boolean)
をカスタマイズしてください。


--変数
global log_str, desktop_folder --globalを使うなんて!w
set log_str to ((current date) as Unicode text) & return & "----------------------------" & return --ログファイルに書き込む文字列
set ill_CS2_script_folder to "" --スクリプトフォルダ(初期値)

tell application "Finder"
	activate
	--前準備。Illustrator CS2 が起動していたら,,,
	if (name of every process as Unicode text) contains "Adobe Illustrator" then
		my ver() --バージョンをチェックしてみる。
		--バージョンがOKなら(ちゃっかり^^)プロセスからフルパスをgetする
		set ill_CS2_script_folder to file of process "Adobe Illustrator"
		set ill_CS2_script_folder to ((container of ill_CS2_script_folder) as Unicode text) & "Presets.localized:Scripts.localized:"
		if not (exists folder ill_CS2_script_folder) then my my_error("インストール先フォルダが見つかりませんでした", true)
		my my_error("Illustrator CS2が起動中です。Illustratorを終了してインストールを続行しますか? 未保存のドキュメントがあればインストールを一旦中止してください。", false)
		--開いているドキュメントはすべて保存して閉じ、アプリケーションを終了する
		tell application "Adobe Illustrator"
			activate
			repeat with i in every document
				close i saving yes
			end repeat
			quit
		end tell
	end if
	
	--各種フォルダの場所を確認
	set my_folder to (container of (path to me)) as Unicode text
	set app_folder to (path to applications folder) as Unicode text
	set desktop_folder to (path to desktop folder) as Unicode text
	if ill_CS2_script_folder is "" then --前準備でパスが取れていない
		set ill_CS2_script_folder to (app_folder & "Adobe Illustrator CS2:Presets.localized:Scripts.localized:")
		if not (exists folder ill_CS2_script_folder) then --アプリケーションフォルダにインストールされていない
			--ユーザーがillustratorアプリケーションを選択する
			set ill_CS2_script_folder to choose file with prompt ("Illustrator CS2アプリケーションを選択してください" as Unicode text) of type {"APPL"}
			set ill_CS2_script_folder to ((container of ill_CS2_script_folder) as Unicode text) & "Presets.localized:Scripts.localized:"
			if not (exists folder ill_CS2_script_folder) then my my_error("インストール先フォルダが見つかりませんでした", true)
		end if
	end if
	
	--ログの追加
	set log_str to log_str & "current folder (installer) = " & my_folder & return
	set log_str to log_str & "applications folder = " & app_folder & return
	set log_str to log_str & "desktop folder = " & desktop_folder & return
	set log_str to log_str & "Illustrator CS2 Script folder = " & ill_CS2_script_folder & return
	set log_str to log_str & "----------------------------" & return
	
	
	
	--コピー実行
	--ShowProgressBar
	my my_duplicate(folder (my_folder & "ShowProgressBar"), folder app_folder, true)
	--Graphics to place
	my my_duplicate(folder (my_folder & "Graphics to place"), folder app_folder, "ask")
	--Font Tester
	my my_duplicate(folder (my_folder & "Font Tester"), folder app_folder, "ask")
	my my_duplicate(file (my_folder & "Font Tester:Font Tester_07.app"), folder ill_CS2_script_folder, true)
	--guide
	my my_duplicate(folder (my_folder & "guide:"), folder app_folder, "ask")
	my my_duplicate(folder (my_folder & "guide:"), folder ill_CS2_script_folder, true)
	
	
	my write_file(log_str & "----------------------------" & return & "すべてのインストールが正常に行われました" & return & "============================" & return, desktop_folder & "installer_log.txt") --ログの書き出し
	display dialog "インストールに成功しました!"
	
end tell


--------------------------------------------------------●Illustrator CSバージョン確認ルーチン
to ver()
	tell application "Adobe Illustrator"
		if version does not start with "12" then
			my my_error("バージョンの違うIllustratorが起動中です。", true)
		end if
	end tell
end ver

--------------------------------------------------------●ファイル(フォルダ)の複製
(*
from_alias			コピー元
to_alias				コピー先
replacing_boolean		trueなら既存のファイルを置き換える。falseなら置き換えない。"ask"ならダイアログを出す。
*)
to my_duplicate(from_alias, to_alias, replacing_boolean)
	tell application "Finder"
		activate
		try
			if exists to_alias then
				if replacing_boolean is "ask" then
					set ANS to button returned of (display dialog (name of to_alias as Unicode text) & "はすでに存在しています。置き換えますか?" buttons {"キャンセル", "置き換え", "コピーしない"} default button 3 with icon note)
					if ANS is "置き換え" then
						set tmp to duplicate from_alias to to_alias with replacing
					end if
				else if replacing_boolean then
					set tmp to duplicate from_alias to to_alias with replacing
				end if
			else
				set tmp to duplicate from_alias to to_alias with replacing
			end if
			set log_str to log_str & "copy	" & (tmp as Unicode text) & return
		on error errMsg number errNum
			my my_error("インストールに失敗しました" & return & errMsg & return & errNum, true)
		end try
	end tell
end my_duplicate

--------------------------------------------------------●ファイル書き出し
on write_file(contents_txt, my_file)
	tell application "Finder"
		set FH to open for access my_file with write permission
		try
			set eof_pos to get eof FH
			write contents_txt starting at (eof_pos + 1) to FH
		on error errMsg number errNo
			close access FH
			activate
			display dialog "ログ書き込み時のエラーです" & return & errMsg & errNo
			return
		end try
		close access FH
		update my_file
	end tell
end write_file

----------------------------------●エラー処理
on my_error(err_str, my_stop)
	set err_str to err_str as Unicode text
	if my_stop then
		set my_stop to {"中止"}
	else
		set my_stop to {"中止", "続行"}
	end if
	tell application "Finder"
		activate
		set ANS to button returned of (display dialog err_str buttons my_stop with icon stop) --警告ダイアログ出してストップ
		if ANS is "中止" then
			my write_file(log_str & "----------------------------" & return & err_str & return & "インストールに失敗しました" & return & "============================" & return, desktop_folder & "installer_log.txt") --ログの書き出し
			error number -128
		end if
	end tell
end my_error