X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/fb724e553757e9d3344be443ab5f329afc9bf91c..77ab81d0545e980c57c0a35510ade29a9e43b4cd:/nt/addpm.c diff --git a/nt/addpm.c b/nt/addpm.c index f2bf00813b..8a5e1a435c 100644 --- a/nt/addpm.c +++ b/nt/addpm.c @@ -62,11 +62,13 @@ DdeCallback (UINT uType, UINT uFmt, HCONV hconv, #define REG_GTK "SOFTWARE\\GTK\\2.0" #define REG_APP_PATH \ "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\emacs.exe" +#define REG_RUNEMACS_PATH \ + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\runemacs.exe" static struct entry { - char *name; - char *value; + const char *name; + const char *value; } env_vars[] = { @@ -83,8 +85,7 @@ env_vars[] = }; BOOL -add_registry (path) - char *path; +add_registry (const char *path) { HKEY hrootkey = NULL; int i; @@ -112,7 +113,7 @@ add_registry (path) emacs_path = (char *) alloca (len); sprintf (emacs_path, "%s\\bin\\emacs.exe", path); - RegSetValueEx (hrootkey, NULL, 0, REG_SZ, emacs_path, len); + RegSetValueEx (hrootkey, NULL, 0, REG_EXPAND_SZ, emacs_path, len); /* Look for a GTK installation. If found, add it to the library search path for Emacs so that the image libraries it provides are available @@ -130,10 +131,26 @@ add_registry (path) /* Make sure the emacs bin directory continues to be searched first by including it as well. */ char *dll_paths; + HKEY runemacs_key = NULL; len = strlen (path) + 5 + size; dll_paths = (char *) alloca (size + strlen (path) + 1); sprintf (dll_paths, "%s\\bin;%s", path, gtk_path); - RegSetValueEx (hrootkey, "Path", 0, REG_SZ, dll_paths, len); + RegSetValueEx (hrootkey, "Path", 0, REG_EXPAND_SZ, + dll_paths, len); + + /* Set the same path for runemacs.exe, as the Explorer shell + looks this up, so the above does not take effect when + emacs.exe is spawned from runemacs.exe. */ + if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_RUNEMACS_PATH, + 0, "", REG_OPTION_NON_VOLATILE, + KEY_WRITE, NULL, &runemacs_key, NULL) + == ERROR_SUCCESS) + { + RegSetValueEx (runemacs_key, "Path", 0, REG_EXPAND_SZ, + dll_paths, len); + + RegCloseKey (runemacs_key); + } } } RegCloseKey (gtk_key); @@ -161,7 +178,7 @@ add_registry (path) for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++) { - char * value = env_vars[i].value ? env_vars[i].value : path; + const char * value = env_vars[i].value ? env_vars[i].value : path; if (RegSetValueEx (hrootkey, env_vars[i].name, 0, REG_EXPAND_SZ, @@ -175,16 +192,14 @@ add_registry (path) } int -main (argc, argv) - int argc; - char *argv[]; +main (int argc, char *argv[]) { char start_folder[MAX_PATH + 1]; int shortcuts_created = 0; int com_available = 1; char modname[MAX_PATH]; - char *prog_name; - char *emacs_path; + const char *prog_name; + const char *emacs_path; char *p; int quiet = 0; HRESULT result; @@ -315,10 +330,10 @@ main (argc, argv) if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE))) shortcuts_created = 1; IPersistFile_Release (lnk); - + } } - } + } } if (com_available)