@@ -7,6 +7,7 @@ import { ErrorHandler, ErrorType } from './errorHandler';
77import { logger } from './logger' ;
88import { ExtensionImportResult } from './reportManager' ;
99import { isExtensionIgnored } from '../types/constants' ;
10+ import { getVSCodeExtensionsDirectory } from '../utils/vscodeEnvironment' ;
1011
1112export interface ExtensionComparisonResult {
1213 id : string ;
@@ -347,21 +348,22 @@ export class ExtensionManager {
347348 * 获取扩展目录
348349 */
349350 private getExtensionsDirectory ( ) : string {
350- if ( process . env . VSCODE_PORTABLE ) {
351- return path . join ( process . env . VSCODE_PORTABLE , 'data' , 'extensions' ) ;
351+ // 方法1: 从已安装的扩展路径推断扩展目录
352+ const installedExtensions = vscode . extensions . all . filter ( ( ext ) => ! ext . packageJSON . isBuiltin ) ;
353+
354+ if ( installedExtensions . length > 0 ) {
355+ // 获取第一个非内置扩展的路径
356+ const firstExtPath = installedExtensions [ 0 ] . extensionPath ;
357+ // 扩展路径格式: /path/to/extensions/publisher.name-version
358+ // 我们需要获取 extensions 目录
359+ const extensionsDir = path . dirname ( firstExtPath ) ;
360+ logger . debug ( `从已安装扩展推断扩展目录: ${ extensionsDir } ` ) ;
361+ return extensionsDir ;
352362 }
353363
354- const platform = os . platform ( ) ;
355- const homeDir = os . homedir ( ) ;
356-
357- switch ( platform ) {
358- case 'win32' :
359- case 'darwin' :
360- case 'linux' :
361- return path . join ( homeDir , '.vscode' , 'extensions' ) ;
362- default :
363- return path . join ( homeDir , '.vscode' , 'extensions' ) ;
364- }
364+ // 方法2: 如果没有已安装的扩展,使用 vscodeEnvironment 工具函数作为后备
365+ logger . debug ( '没有找到已安装的扩展,使用后备方法获取扩展目录' ) ;
366+ return getVSCodeExtensionsDirectory ( ) ;
365367 }
366368
367369 /**
0 commit comments