Revision | 99 (tree) |
---|---|
Zeit | 2021-06-19 21:56:24 |
Autor | hirukawa_ryo |
* exewrap 1.6.5
Splash-Image で指定されたファイルがファイルシステム上に存在する場合、それを優先的に使用するようにしました。
@@ -1,27 +1,24 @@ | ||
1 | -Copyright (C) 2005-2020 HIRUKAWA Ryo. All rights reserved. | |
1 | +Copyright (C) 2005-2021 HIRUKAWA Ryo. All rights reserved. | |
2 | 2 | |
3 | -ソースコード形式であれバイナリ形式であれ、変更の有無に関わらず、以下の条件を満 | |
4 | -たす限りにおいて、再配布および使用を許可します: | |
3 | +ソースコード形式であれバイナリ形式であれ、変更の有無に関わらず、以下の条件を満たす限り | |
4 | +において、再配布および使用を許可します: | |
5 | 5 | |
6 | - 1. ソースコード形式で再配布する場合、上記著作権表示、本条件書および下記責任 | |
7 | - 限定規定を必ず含めてください。 | |
6 | + 1. ソースコード形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規 | |
7 | + 定を必ず含めてください。 | |
8 | 8 | |
9 | - 2. バイナリ形式で再配布する場合、上記著作権表示、本条件書および下記責任限定 | |
10 | - 規定を、配布物とともに提供される文書および/または他の資料に必ず含めてく | |
11 | - ださい。 | |
9 | + 2. バイナリ形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を、 | |
10 | + 配布物とともに提供される文書および/または他の資料に必ず含めてください。 | |
12 | 11 | |
13 | -本ソフトウェアの実行により生成されたファイルの利用および配布について一切の制限 | |
14 | -を行いません。上記著作権表示、本状条件書、下記責任限定規定を含まずに、本ソフト | |
15 | -ウェアの実行により生成されたファイルを完全に自由に利用および配布することができ | |
16 | -ます。 | |
12 | +本ソフトウェアの実行により生成されたファイルの利用および配布について一切の制限を行いま | |
13 | +せん。上記著作権表示、本状条件書、下記責任限定規定を含まずに、本ソフトウェアの実行によ | |
14 | +り生成されたファイルを完全に自由に利用および配布することができます。 | |
17 | 15 | |
18 | -本ソフトウェアは HIRUKAWA Ryo によって、"現状のまま" 提供されるものとします。 | |
19 | -本ソフトウェアについては、明示黙示を問わず、商用品として通常そなえるべき品質を | |
20 | -そなえているとの保証も、特定の目的に適合するとの保証を含め、何の保証もなされま | |
21 | -せん。事由のいかんを問わず、損害発生の原因いかんを問わず、且つ、責任の根拠が契 | |
22 | -約であるか厳格責任であるか (過失その他) 不法行為であるかを問わず、HIRUKAWA Ryo | |
23 | -も寄与者も、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフ | |
24 | -トウェアの使用から発生した直接損害、間接損害、偶発的な損害、特別損害、懲罰的損 | |
25 | -害または結果損害のいずれに対しても (代替品または サービスの提供; 使用機会、 | |
26 | -データまたは利益の損失の補償;または、業務の中断に対する補償を含め) 責任をいっ | |
27 | -さい負いません。 | |
16 | +本ソフトウェアは HIRUKAWA Ryo によって、"現状のまま" 提供されるものとします。 本ソフ | |
17 | +トウェアについては、明示黙示を問わず、商用品として通常そなえるべき品質をそなえていると | |
18 | +の保証も、特定の目的に適合するとの保証を含め、何の保証もなされません。事由のいかんを問 | |
19 | +わず、損害発生の原因いかんを問わず、且つ、責任の根拠が契約であるか厳格責任であるか (過 | |
20 | +失その他) 不法行為であるかを問わず、HIRUKAWA Ryoも寄与者も、仮にそのような損害が発生 | |
21 | +する可能性を知らされていたとしても、本ソフトウェアの使用から発生した直接損害、間接損害、 | |
22 | +偶発的な損害、特別損害、懲罰的損害または結果損害のいずれに対しても (代替品または サー | |
23 | +ビスの提供; 使用機会、データまたは利益の損失の補償; または、業務の中断に対する補償を含 | |
24 | +め) 責任をいっさい負いません。 |
@@ -93,7 +93,7 @@ | ||
93 | 93 | |
94 | 94 | wcoutf( L"exewrap %ls for %ls (%d-bit) \r\n" |
95 | 95 | L"Native executable java application wrapper.\r\n" |
96 | - L"Copyright (C) 2005-2020 HIRUKAWA Ryo. All rights reserved.\r\n" | |
96 | + L"Copyright (C) 2005-2021 HIRUKAWA Ryo. All rights reserved.\r\n" | |
97 | 97 | L"\r\n" |
98 | 98 | L"Usage: %ls <options> <jar-file>\r\n" |
99 | 99 | L"Options:\r\n" |
@@ -34,13 +34,16 @@ | ||
34 | 34 | |
35 | 35 | typedef void(*SplashInit_t)(void); |
36 | 36 | typedef int(*SplashLoadMemory_t)(void* pdata, int size); |
37 | -SplashInit_t SplashInit; | |
38 | -SplashLoadMemory_t SplashLoadMemory; | |
39 | -HMODULE splashscreendll; | |
40 | -static HANDLE hConOut = NULL; | |
37 | +typedef int(*SplashLoadFile_t)(const char* filename); | |
38 | +// typedef void (*SplashSetScaleFactor_t)(float scaleFactor); | |
39 | +SplashInit_t SplashInit; | |
40 | +SplashLoadMemory_t SplashLoadMemory; | |
41 | +SplashLoadFile_t SplashLoadFile; | |
42 | +// SplashSetScaleFactor_t SplashSetScaleFactor; | |
43 | +HMODULE splashscreendll; | |
44 | +static HANDLE hConOut = NULL; | |
41 | 45 | |
42 | 46 | |
43 | - | |
44 | 47 | INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t* lpCmdLine, int nCmdShow) |
45 | 48 | { |
46 | 49 | int argc = __argc; |
@@ -51,7 +54,8 @@ | ||
51 | 54 | wchar_t* relative_extdirs = NULL; |
52 | 55 | wchar_t* ext_flags = NULL; |
53 | 56 | wchar_t* vm_args_opt = NULL; |
54 | - wchar_t* utilities = NULL; | |
57 | + wchar_t* utilities = NULL; | |
58 | + wchar_t* splash_screen_name = NULL; | |
55 | 59 | BOOL use_server_vm; |
56 | 60 | DWORD vm_search_locations = 0; |
57 | 61 | BOOL is_security_manager_required = FALSE; |
@@ -178,7 +182,8 @@ | ||
178 | 182 | //wcscat_s(utilities, BUFFER_SIZE, UTIL_EVENT_LOG_HANDLER); |
179 | 183 | |
180 | 184 | // Display Splash Screen |
181 | - if(get_resource(L"SPLASH_SCREEN_IMAGE", &res) != NULL) | |
185 | + splash_screen_name = from_utf8((char*)get_resource(L"SPLASH_SCREEN_NAME", NULL)); | |
186 | + if(splash_screen_name != NULL) | |
182 | 187 | { |
183 | 188 | if(is_add_dll_directory_supported) |
184 | 189 | { |
@@ -193,16 +198,25 @@ | ||
193 | 198 | if(splashscreendll != NULL) |
194 | 199 | { |
195 | 200 | SplashInit = (SplashInit_t)GetProcAddress(splashscreendll, "SplashInit"); |
196 | - if(SplashInit != NULL) | |
197 | - { | |
198 | - SplashLoadMemory = (SplashLoadMemory_t)GetProcAddress(splashscreendll, "SplashLoadMemory"); | |
199 | - if(SplashLoadMemory != NULL) | |
200 | - { | |
201 | - SplashInit(); | |
202 | - SplashLoadMemory(res.buf, res.len); | |
203 | - } | |
204 | - } | |
201 | + SplashLoadMemory = (SplashLoadMemory_t)GetProcAddress(splashscreendll, "SplashLoadMemory"); | |
202 | + SplashLoadFile = (SplashLoadFile_t)GetProcAddress(splashscreendll, "SplashLoadFile"); | |
205 | 203 | } |
204 | + | |
205 | + // SPLASH_SCREEN_NAME に格納されているファイル名がファイルシステム上に存在する場合はそれを SPLASH_SCREEN_IMAGE より優先して扱います。 | |
206 | + if(SplashInit != NULL && SplashLoadFile != NULL && GetFileAttributes(splash_screen_name) != INVALID_FILE_ATTRIBUTES) | |
207 | + { | |
208 | + char* filename = to_platform_encoding(splash_screen_name); | |
209 | + | |
210 | + SplashInit(); | |
211 | + SplashLoadFile(filename); | |
212 | + | |
213 | + free(filename); | |
214 | + } | |
215 | + else if(SplashInit != NULL && SplashLoadMemory != NULL && get_resource(L"SPLASH_SCREEN_IMAGE", &res) != NULL) | |
216 | + { | |
217 | + SplashInit(); | |
218 | + SplashLoadMemory(res.buf, res.len); | |
219 | + } | |
206 | 220 | } |
207 | 221 | |
208 | 222 | vm_args_opt = from_utf8((char*)get_resource(L"VMARGS", NULL)); |
@@ -314,11 +328,10 @@ | ||
314 | 328 | relative_extdirs = NULL; |
315 | 329 | } |
316 | 330 | |
317 | - if(get_resource(L"SPLASH_SCREEN_IMAGE", &res) != NULL) | |
331 | + if(splash_screen_name != NULL && get_resource(L"SPLASH_SCREEN_IMAGE", &res) != NULL) | |
318 | 332 | { |
319 | 333 | BYTE* splash_screen_image_buf = res.buf; |
320 | 334 | DWORD splash_screen_image_len = res.len; |
321 | - wchar_t* splash_screen_name = from_utf8((char*)get_resource(L"SPLASH_SCREEN_NAME", NULL)); | |
322 | 335 | |
323 | 336 | // exewrapで実行ファイルを作成時にマニフェストファイルのSplash-Image:に指定されたファイルは |
324 | 337 | // 実行ファイルのリソース SPLASH_SCREEN_NAME と SPLASH_SCREEN_IMAGE に配置され、 |
@@ -326,12 +339,12 @@ | ||
326 | 339 | // 実行ファイルの起動時にリソース SPLASH_SCREEN_NAME と SPLASH_SCREEN_IMAGE を Loader の resources に登録することでJavaコードからもリソースを参照できるようにます。 |
327 | 340 | // (JARから取り除かれたスプラッシュスクリーンのリソースがちゃんと参照できます。) |
328 | 341 | set_splash_screen_resource(splash_screen_name, splash_screen_image_buf, splash_screen_image_len); |
329 | - | |
330 | - if(splash_screen_name != NULL) | |
331 | - { | |
332 | - free(splash_screen_name); | |
333 | - } | |
334 | 342 | } |
343 | + if(splash_screen_name != NULL) | |
344 | + { | |
345 | + free(splash_screen_name); | |
346 | + splash_screen_name = NULL; | |
347 | + } | |
335 | 348 | |
336 | 349 | if(synchronize_mutex_handle != NULL) |
337 | 350 | { |