private Task initComposer(string appPath, string composerMirrorUrl, List <string> userPathList) { Task t1 = Task.Run(() => { //生成批处理文件 File.WriteAllText(appPath + @"\composer.bat", "@php \"%~dp0composer.phar\" %*", System.Text.Encoding.Default); //判断Path环境变量中是否有当前目录 List <string> pathList = PathEnvironment.getPathList(EnvironmentVariableTarget.Machine); pathList.AddRange(PathEnvironment.getPathList(EnvironmentVariableTarget.User)); if (!pathList.Contains(appPath)) { userPathList.Add(appPath); PathEnvironment.setPathList(userPathList, EnvironmentVariableTarget.User); } }); //设置全局镜像 if (composerMirrorUrl != "") { Task t2 = this.setComposerMirrorAsync(appPath, composerMirrorUrl); return(Task.WhenAll(t1, t2)); } else { return(t1); } }
/// <summary> /// 用户Path环境变量中删除 /// </summary> /// <param name="appPath"></param> private void removeUserPath(string appPath) { System.Collections.Generic.List <string> userPathList = PathEnvironment.getPathList(EnvironmentVariableTarget.User); if (userPathList.Contains(appPath)) { userPathList.Remove(appPath); PathEnvironment.setPathList(userPathList, EnvironmentVariableTarget.User); } }
/// <summary> /// 获取Path环境变量中已经安装过composer的目录 /// </summary> /// <returns></returns> public Task <List <string> > getInstalledDirsAsync() { return(Task.Run(() => { List <string> result = new List <string>(); List <string> pathList = PathEnvironment.getPathList(EnvironmentVariableTarget.Machine); pathList.AddRange(PathEnvironment.getPathList(EnvironmentVariableTarget.User)); FileInfo tmpFileinfo; foreach (string tmpPath in pathList) { tmpFileinfo = new FileInfo(tmpPath + @"\composer.bat"); if (tmpFileinfo.Exists) { result.Add(tmpPath); } } return result; })); }
public Task installAsync(string appPath, List <string> toRemoveDirs) { return(Task.Run(async() => { List <string> userPathList = PathEnvironment.getPathList(EnvironmentVariableTarget.User); //删除已安装的composer:文件+用户Path环境变量 if (toRemoveDirs != null) { bool needDelEnv = false; foreach (string tmpPath in toRemoveDirs) { FileInfo batFile = new FileInfo(tmpPath + @"\composer.bat"); if (batFile.Exists) { batFile.Delete(); } FileInfo pharFile = new FileInfo(tmpPath + @"\composer.phar"); if (pharFile.Exists) { pharFile.Delete(); } if (userPathList.Contains(tmpPath)) { needDelEnv = true; userPathList.Remove(tmpPath); } } if (needDelEnv) { PathEnvironment.setPathList(userPathList, EnvironmentVariableTarget.User); } } //获取url string composerUrl = null; string composerMirrorUrl = null; this.setting.Dispatcher.Invoke(() => { MainWindow mainWin = this.setting.Owner as MainWindow; composerUrl = mainWin.xmlResource.composerUrl; composerMirrorUrl = mainWin.xmlResource.composerMirror; }); //下载 string savePath = appPath + @"\composer.phar"; DownloadHelper downloadHelper = new DownloadHelper(); await downloadHelper.downloadFileAsync(new Uri(composerUrl), savePath, (long processed, long total) => { this.setting.Dispatcher.Invoke(() => { this.setting.composerProgressBar.IsIndeterminate = false; this.setting.composerProgressBar.Value = processed; this.setting.composerProgressBar.Maximum = total; }); }); this.setting.Dispatcher.Invoke(() => { this.setting.composerProgressBar.IsIndeterminate = true; }); //初始化 await this.initComposer(appPath, composerMirrorUrl, userPathList); })); }