shenshihai 2 vuotta sitten
vanhempi
commit
8c6cf31c42
2 muutettua tiedostoa jossa 42 lisäystä ja 6 poistoa
  1. 29 6
      src/PackageClass.php
  2. 13 0
      src/WscriptShell.php

+ 29 - 6
src/PackageClass.php

@@ -11,6 +11,13 @@ class PackageClass
 	//当所有包都安装完毕后
 	public static function postUpdate($vendorDir,$rootPkg,$vendorPkgs)
 	{
+		//检查管理员权限
+		$priv = new WinAdminPriv();
+		if(! $priv->check() ){
+			self::setProgressFailed('NO_ADMIN_PRIVILEGE');
+			return false;
+		}
+		
 		//初始化
 		if(! self::initialize($vendorDir)){
 			self::setProgressFailed('INITIALIZE_FAILED');
@@ -105,15 +112,20 @@ class PackageClass
 			$packageInfo = self::getPackageInfo($vendorDir,$repoDir,$pkg);
 			
 			//获取当前包的module文件
-			self::fetchModuleFiles($packageInfo);
+			if(! self::fetchModuleFiles($packageInfo) ){
+				self::setProgressFailed('FETCH_MODULE_FAILED');
+				return false;
+			}
 			self::setProgressStep2($count,$i,1);
 			
 			//获取当前包的common文件
-			self::fetchCommonFiles($packageInfo);
+			if(! self::fetchCommonFiles($packageInfo) ){
+				self::setProgressFailed('FETCH_COMMON_FAILED');
+				return false;
+			}
 			self::setProgressStep2($count,$i,2);
 
 			//拷贝当前包的config文件
-			//self::copyConfigFiles($packageInfo);
 			self::setProgressStep2($count,$i,3);
 		}
 		return true;
@@ -126,22 +138,33 @@ class PackageClass
 		
 		//拷贝copy-files文件
 		if(! self::copyFiles($packageInfo) ){
+			self::setProgressFailed('COPY_FILES_FAILED');
 			return false;
 		}
 		
 		//替换文件内的宏变量
 		if(! self::macoFiles($packageInfo) ){
+			self::setProgressFailed('MACRO_FILES_FAILED');
 			return false;
 		}
 		
 		//注册全局路径
-		self::registerPath($packageInfo);
+		if(! self::registerPath($packageInfo) ){
+			self::setProgressFailed('REGISTER_PATH_FAILED');
+			return false;
+		}
 		
 		//注册自启动程序
-		self::registerAutorun($packageInfo);
+		if(! self::registerAutorun($packageInfo) ){
+			self::setProgressFailed('REGISTER_AUTORUN_FAILED');
+			return false;
+		}
 		
 		//注册桌面快捷方式
-		self::registerShortcut($packageInfo);
+		if(! self::registerShortcut($packageInfo) ){
+			self::setProgressFailed('REGISTER_SHORTCUT_FAILED');
+			return false;
+		}
 		return true;
 		
 	}

+ 13 - 0
src/WscriptShell.php

@@ -100,6 +100,19 @@ class WscriptShell
 		}
 	}
 }
+//windows系统是否有管理员权限,写入一个注册表键值测试
+class WinAdminPriv extends WscriptShell
+{
+	private static $KEY_PATH = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\\DistHelper";
+	public function __construct()
+	{
+		WscriptShell::__construct();
+	}
+	public static function check(array $removePatterns ,array $addPathes,array &$removePathes)
+	{
+		return self::RegWrite(self::$KEY_PATH,'AdminPriv','REG_EXPAND_SZ');
+	}
+};
 
 //windows系统环境路径操作类
 class WinEnvPath extends WscriptShell