浏览代码

set local user registry (prevent %resolve% bugs in XP).

Nicolas Cannasse 18 年之前
父节点
当前提交
cb33e1a81c
共有 1 个文件被更改,包括 10 次插入5 次删除
  1. 10 5
      doc/setup.cpp

+ 10 - 5
doc/setup.cpp

@@ -20,6 +20,10 @@
 // this is a small program that do basic haXe setup on Windows
 #include <windows.h>
 
+static void Set( HKEY k, const char *name, DWORD t, const char *data ) {
+	RegSetValueEx(k,name,0,t,(const BYTE*)data,(DWORD)strlen(data)+1);
+}
+
 int WINAPI WinMain( HINSTANCE inst, HINSTANCE prev, LPSTR lpCmdLine, int nCmdShow ) {
 	char path[MAX_PATH];
 	*path = '"';
@@ -37,22 +41,23 @@ int WINAPI WinMain( HINSTANCE inst, HINSTANCE prev, LPSTR lpCmdLine, int nCmdSho
 	DWORD ktype;
 	DWORD ksize = 16000;
 	char *kdata = new char[16000];
-	RegOpenKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment",&k);
+	memset(kdata,0,ksize);
+	RegOpenKey(HKEY_CURRENT_USER,"Environment",&k);	
 	RegQueryValueEx(k,"PATH",NULL,&ktype,(LPBYTE)kdata,&ksize);
 	if( strstr(kdata,"%HAXEPATH%") == NULL ) {
 		char *s = kdata + strlen(kdata);
 		strcpy(s,";%HAXEPATH%");
-		RegSetValueEx(k,"PATH",0,REG_EXPAND_SZ,(const BYTE*)kdata,(DWORD)(strlen(kdata)+1));
+		Set(k,"PATH",REG_EXPAND_SZ,kdata);		
 	}
 	if( strstr(kdata,"%NEKO_INSTPATH%") == NULL ) {
 		char *s = kdata + strlen(kdata);
 		strcpy(s,";%NEKO_INSTPATH%");
-		RegSetValueEx(k,"PATH",0,REG_EXPAND_SZ,(const BYTE*)kdata,(DWORD)(strlen(kdata)+1));
+		Set(k,"PATH",REG_EXPAND_SZ,kdata);
 	}
-	RegSetValueEx(k,"HAXEPATH",0,REG_SZ,(const BYTE*)(path+1),(DWORD)strlen(path));
+	Set(k,"HAXEPATH",REG_SZ,path + 1);	
 	s[-1] = 0;
 	strcpy(strrchr(path,'\\'),"\\neko");
-	RegSetValueEx(k,"NEKO_INSTPATH",0,REG_SZ,(const BYTE*)(path+1),(DWORD)strlen(path));
+	Set(k,"NEKO_INSTPATH",REG_SZ,path+1);
 	RegCloseKey(k);
 
 	// inform running apps of env changes (W2K/NT systems only ?)