diff options
Diffstat (limited to 'setup')
-rw-r--r-- | setup/.gitignore | 2 | ||||
-rw-r--r-- | setup/Makefile.am | 2 | ||||
-rw-r--r-- | setup/execute.c | 35 | ||||
-rw-r--r-- | setup/setup-manifest.xml | 25 | ||||
-rw-r--r-- | setup/setup-res.rc.in | 2 |
5 files changed, 47 insertions, 19 deletions
diff --git a/setup/.gitignore b/setup/.gitignore index e2da8a59..37c8e4c1 100644 --- a/setup/.gitignore +++ b/setup/.gitignore @@ -4,3 +4,5 @@ Makefile chocolate-setup *.rc *.exe +tags +TAGS diff --git a/setup/Makefile.am b/setup/Makefile.am index 92b4e394..91c7449a 100644 --- a/setup/Makefile.am +++ b/setup/Makefile.am @@ -44,7 +44,7 @@ chocolate_setup_LDADD = \ if HAVE_PYTHON -setup_icon.c : ../data/setup.ico +setup_icon.c : ../data/setup8.ico ../data/convert-icon $^ $@ endif diff --git a/setup/execute.c b/setup/execute.c index fb9885fa..8e753f60 100644 --- a/setup/execute.c +++ b/setup/execute.c @@ -185,29 +185,38 @@ static void ConcatWCString(wchar_t *buf, const char *value) static wchar_t *BuildCommandLine(const char *program, const char *arg) { + wchar_t exe_path[MAX_PATH]; wchar_t *result; - char *sep; + wchar_t *sep; + + // Get the path to this .exe file. + + GetModuleFileNameW(NULL, exe_path, MAX_PATH); - result = calloc(strlen(myargv[0]) + strlen(program) + strlen(arg) + 6, + // Allocate buffer to contain result string. + + result = calloc(wcslen(exe_path) + strlen(program) + strlen(arg) + 6, sizeof(wchar_t)); wcscpy(result, L"\""); - sep = strrchr(myargv[0], DIR_SEPARATOR); + // Copy the path part of the filename (including ending \) + // into the result buffer: + + sep = wcsrchr(exe_path, DIR_SEPARATOR); if (sep != NULL) { - ConcatWCString(result, myargv[0]); - - // Cut off the string after the last directory separator, - // before appending the actual program. - - result[sep - myargv[0] + 2] = '\0'; - + wcsncpy(result + 1, exe_path, sep - exe_path + 1); + result[sep - exe_path + 2] = '\0'; } + // Concatenate the name of the program: + ConcatWCString(result, program); + // End of program name, start of argument: + wcscat(result, L"\" \""); ConcatWCString(result, arg); @@ -301,9 +310,9 @@ static int ExecuteCommand(const char *program, const char *arg) argv[1] = arg; argv[2] = NULL; - execv(argv[0], (char **) argv); + execvp(argv[0], (char **) argv); - exit(-1); + exit(0x80); } else { @@ -312,7 +321,7 @@ static int ExecuteCommand(const char *program, const char *arg) waitpid(childpid, &result, 0); - if (WIFEXITED(result)) + if (WIFEXITED(result) && WEXITSTATUS(result) != 0x80) { return WEXITSTATUS(result); } diff --git a/setup/setup-manifest.xml b/setup/setup-manifest.xml index 409a142b..c2788306 100644 --- a/setup/setup-manifest.xml +++ b/setup/setup-manifest.xml @@ -1,16 +1,33 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> + +<!-- Magic manifest file that should make Windows Vista/7 not + attempt to gain elevated privileges for chocolate-setup. + + Based on: + + http://www.cygwin.com/ml/cygwin/2006-12/msg00580.html + --> + <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <!-- The "name" field in this tag should be the same as the executable's name --> - <assemblyIdentity version="1.2.1.0" processorArchitecture="*" - name="chocolate-setup" type="win32"/> + <assemblyIdentity version="0.0.0.0" processorArchitecture="X86" + name="chocolate-setup.exe" type="win32"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> - <!-- Hi Vista! We don't require elevated privileges. Thanks! --> - <requestedExecutionLevel level="asInvoker"/> + <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> + + <!-- Stop the Program Compatibility Assistant appearing: --> + + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Vista --> + </application> + </compatibility> </assembly> diff --git a/setup/setup-res.rc.in b/setup/setup-res.rc.in index dc25135a..2bc3106c 100644 --- a/setup/setup-res.rc.in +++ b/setup/setup-res.rc.in @@ -1,6 +1,6 @@ 1 ICON "../data/setup.ico" -CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "setup-manifest.xml" +1 24 MOVEABLE PURE "setup-manifest.xml" 1 VERSIONINFO PRODUCTVERSION @WINDOWS_RC_VERSION@ |