• R/O
  • SSH
  • HTTPS

exewrap: コミット


コミットメタ情報

リビジョン89 (tree)
日時2020-07-12 11:41:59
作者hirukawa_ryo

ログメッセージ

* exewrap 1.6.1
実行ファイルのディレクトリーをカレントディレクトリーに設定する拡張フラグ CD_APPDIR を追加しました。
これにより、システムプロパティ― user.dir にも実行ファイルのディレクトリーが設定されるようになります。

変更サマリ

差分

--- exewrap/trunk/exewrap/samples/gui-swing-3/SwingSample3.java (revision 88)
+++ exewrap/trunk/exewrap/samples/gui-swing-3/SwingSample3.java (revision 89)
@@ -27,6 +27,9 @@
2727 if(text.length() > 0) {
2828 label.setText(text.toString());
2929 }
30+ if((frame.getExtendedState() & JFrame.ICONIFIED) != 0) {
31+ frame.setExtendedState(frame.getExtendedState() & ~JFrame.ICONIFIED);
32+ }
3033 frame.toFront();
3134 }
3235 }
--- exewrap/trunk/exewrap/src/image_console.c (revision 88)
+++ exewrap/trunk/exewrap/src/image_console.c (revision 89)
@@ -88,6 +88,19 @@
8888 exit_process(ERROR_BUSY, NULL);
8989 }
9090 }
91+ if(wcsstr(ext_flags, L"CD_APPDIR") != NULL)
92+ {
93+ // 拡張フラグ CD_APPDIR が指定されている場合、実行ファイルのあるフォルダーをカレントディレクトリに設定します。
94+ // これによりJavaのシステムプロパティ user.dir にも実行ファイルのあるフォルダーが設定されることになります。
95+ wchar_t* app_dir = (wchar_t*)malloc(MAX_LONG_PATH * sizeof(wchar_t));
96+ if(app_dir == NULL) {
97+ exit_process(ERROR_NOT_ENOUGH_MEMORY, L"malloc");
98+ }
99+ GetModuleFileName(NULL, app_dir, MAX_LONG_PATH);
100+ *(wcsrchr(app_dir, L'\\')) = L'\0';
101+ SetCurrentDirectory(app_dir);
102+ free(app_dir);
103+ }
91104 }
92105 if(ext_flags == NULL || wcsstr(ext_flags, L"NOENCODINGFIX") == NULL)
93106 {
--- exewrap/trunk/exewrap/src/image_gui.c (revision 88)
+++ exewrap/trunk/exewrap/src/image_gui.c (revision 89)
@@ -116,6 +116,19 @@
116116 goto EXIT;
117117 }
118118 }
119+ if(wcsstr(ext_flags, L"CD_APPDIR") != NULL)
120+ {
121+ // 拡張フラグ CD_APPDIR が指定されている場合、実行ファイルのあるフォルダーをカレントディレクトリに設定します。
122+ // これによりJavaのシステムプロパティ user.dir にも実行ファイルのあるフォルダーが設定されることになります。
123+ wchar_t* app_dir = (wchar_t*)malloc(MAX_LONG_PATH * sizeof(wchar_t));
124+ if(app_dir == NULL) {
125+ exit_process(ERROR_NOT_ENOUGH_MEMORY, L"malloc");
126+ }
127+ GetModuleFileName(NULL, app_dir, MAX_LONG_PATH);
128+ *(wcsrchr(app_dir, L'\\')) = L'\0';
129+ SetCurrentDirectory(app_dir);
130+ free(app_dir);
131+ }
119132 }
120133 if(ext_flags == NULL || wcsstr(ext_flags, L"NOENCODINGFIX") == NULL)
121134 {
--- exewrap/trunk/exewrap/src/image_service.c (revision 88)
+++ exewrap/trunk/exewrap/src/image_service.c (revision 89)
@@ -48,7 +48,6 @@
4848 static void write_message(WORD event_type, const wchar_t* message);
4949 static void write_message_by_error_code(WORD evnet_type, DWORD last_error, const wchar_t* append);
5050 static void show_help_message(void);
51-static void set_current_directory(void);
5251 static wchar_t* get_service_name(void);
5352 static wchar_t* get_pipe_name(void);
5453 static DWORD run_as_administrator(HANDLE pipe, int argc, const wchar_t* argv[], const wchar_t* append);
@@ -64,6 +63,7 @@
6463
6564 int wmain(int argc, wchar_t* argv[])
6665 {
66+ wchar_t* ext_flags = NULL;
6767 wchar_t* service_name = NULL;
6868 int opt_end = 0;
6969 wchar_t* pipe_name = NULL;
@@ -72,10 +72,10 @@
7272
7373 service_name = get_service_name();
7474 flags = parse_args(&argc, argv, &opt_end);
75+ ext_flags = from_utf8((char*)get_resource(L"EXTFLAGS", NULL));
7576
7677 if(flags & SHOW_HELP_MESSAGE)
7778 {
78- wchar_t* ext_flags = from_utf8((char*)get_resource(L"EXTFLAGS", NULL));
7979 if(ext_flags == NULL || wcsstr(ext_flags, L"NOHELP") == NULL)
8080 {
8181 show_help_message();
@@ -83,11 +83,23 @@
8383 }
8484 }
8585
86+ // プロセスがサービスとして実行されている場合、または拡張フラグ CD_APPDIR が指定されている場合、
87+ // 実行ファイルのあるフォルダーをカレントディレクトリに設定します。
88+ // これによりJavaのシステムプロパティ user.dir にも実行ファイルのあるフォルダーが設定されることになります。
89+ if((flags & SERVICE_START_BY_SCM) || (ext_flags != NULL && wcsstr(ext_flags, L"CD_APPDIR") != NULL))
90+ {
91+ wchar_t* app_dir = (wchar_t*)malloc(MAX_LONG_PATH * sizeof(wchar_t));
92+ if(app_dir != NULL) {
93+ GetModuleFileName(NULL, app_dir, MAX_LONG_PATH);
94+ *(wcsrchr(app_dir, L'\\')) = L'\0';
95+ SetCurrentDirectory(app_dir);
96+ free(app_dir);
97+ }
98+ }
99+
86100 if(flags & SERVICE_START_BY_SCM)
87101 {
88102 SERVICE_TABLE_ENTRY ServiceTable[2];
89-
90- set_current_directory();
91103
92104 ARG_COUNT = argc;
93105 ARG_VALUE = argv;
@@ -174,6 +186,10 @@
174186 {
175187 free(service_name);
176188 }
189+ if(ext_flags != NULL)
190+ {
191+ free(ext_flags);
192+ }
177193
178194 ExitProcess(error);
179195 }
@@ -1277,24 +1293,6 @@
12771293 }
12781294
12791295
1280-static void set_current_directory()
1281-{
1282- wchar_t* filepath = NULL;
1283-
1284- filepath = (wchar_t*)malloc(MAX_LONG_PATH * sizeof(wchar_t));
1285- if(filepath == NULL)
1286- {
1287- return;
1288- }
1289-
1290- GetModuleFileName(NULL, filepath, MAX_LONG_PATH);
1291- *(wcsrchr(filepath, L'\\')) = L'\0';
1292- SetCurrentDirectory(filepath);
1293-
1294- free(filepath);
1295-}
1296-
1297-
12981296 static wchar_t* get_service_name()
12991297 {
13001298 wchar_t* name = NULL;
旧リポジトリブラウザで表示