你想要来自 Firefox 插件的这条路径:
var path_progData = Services.dirsvc.get('CmPrgs', Ci.nsIFile).path;
这会给你:
-
C:\ProgramData\Microsoft\Windows\Start Menu\Programs - 在 8.1 上测试(我猜 Win7 和 8 也一样,不过不确定 Win7)
-
C:\Documents and Settings\All Users\Start Menu\Programs - 适用于 WinXP
-
? - WinVista (我有一台 vista 机器,但现在无法访问,稍后会更新)
您可能更喜欢 CmAppData,它在 Win8.1 上只为您提供 C:\ProgramData
在所有平台上收集 Firefox 特殊路径的项目
所以几个月前,我浏览了 Firefox 源代码中的所有特殊路径关键字,我试图将它们全部捕获,我可能遗漏了一些,如果我这样做了,请提及,以便我们改进。我的目标是写一些东西,这样我就可以在所有平台上运行并查看特殊路径是什么。
这是我想出的代码,可以复制粘贴并在浏览器环境中从暂存器运行:(顺便说一句,路径会根据您的配置文件是相对于 Profiles 目录还是绝对路径配置文件而有所不同)(如果您使用的是便携式版本的 Firefox,路径不同)(并非所有路径都只是一些,但在便携式的情况下它们有点疯狂)(便携式 Firefox 仅适用于 Windows)
var DSP = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
var keywords = [];
var str = [];
function doit() {
for (var i=0; i<keywords.length; i++) {
str.push('Keyword: "' + keywords[i] + '"');
try {
var methodFU = FileUtils.getFile(keywords[i], ['']);
str[str.length-1] += '|FU = "' + methodFU.path + '"';
} catch(ex) {
str[str.length-1] += '|FU = "' + ex.message + '"';
}
try {
var methodDS = DSP.get(keywords[i], Ci.nsIFile);
str[str.length-1] += '|DS = "' + methodDS.path + '"';
} catch(ex) {
str[str.length-1] += '|DS = "' + ex.message + '"';
}
}
var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
gClipboardHelper.copyString(str.join('\n'))
console.log(str.join('\n'));
}
var keywords = [
//http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsAppDirectoryServiceDefs.h
'AppRegF',
'AppRegD',
'DefRt',
'PrfDef',
'current',
'default',
'DefProfRt',
'DefProfLRt',
'ARes',
'AChrom',
'APlugns',
'SrchPlugns',
'AChromDL',
'APluginsDL',
'SrchPluginsDL',
'SHARED',
'PrefD',
'PrefF',
'MetroPrefF',
'PrefDL',
'ExtPrefDL',
'PrefDOverride',
'ProfD',
'ProfLD',
'UChrm',
'UsrSrchPlugns',
'LclSt',
'UPnls',
'UMimTyp',
'cachePDir',
'BMarks',
'DLoads',
'SrchF',
'XPIClnupD',
'indexedDBPDir',
'permissionDBPDir',
//http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsDirectoryServiceDefs.h
'Home',
'TmpD',
'CurWorkD',
'Home',
'Desk',
'CurProcD',
'XCurProcD',
'XpcomLib',
'GreD',
'SysD',
'Trsh',
'Strt',
'Shdwn',
'ApplMenu',
'CntlPnl',
'Exts',
'Fnts',
'Prfs',
'Docs',
'ISrch',
'DfltDwnld',
'ULibDir',
'UsrDsk',
'LocDsk',
'UsrApp',
'LocApp',
'UsrDocs',
'LocDocs',
'UsrIntrntPlgn',
'LoclIntrntPlgn',
'UsrFrmwrks',
'LocFrmwrks',
'UsrPrfs',
'LocPrfs',
'Pct',
'Mov',
'Music',
'IntrntSts',
'WinD',
'ProgF',
'DeskV',
'Progs',
'Cntls',
'Prnts',
'Pers',
'Favs',
'Strt',
'Rcnt',
'SndTo',
'Buckt',
'Strt',
'DeskP',
'Drivs',
'NetW',
'netH',
'Fnts',
'Tmpls',
'CmStrt',
'CmPrgs',
'CmDeskP',
'CmAppData',
'AppData',
'LocalAppData',
'PrntHd',
'CookD',
'DfltDwnld',
'Docs',
'Pict',
'Music',
'Vids',
'Locl',
'LibD',
'XDGDesk',
'XDGDocs',
'XDGDwnld',
'XDGMusic',
'XDGPict',
'XDGPubSh',
'XDGTempl',
'XDGVids',
'DfltDwnld',
'DrvD',
//http://mxr.mozilla.org/mozilla-release/source/toolkit/mozapps/update/nsUpdateService.js#76
'GreD',
'UpdRootD',
'XREExeF',
//http://mxr.mozilla.org/mozilla-release/source/toolkit/mozapps/update/tests/shared.js#55
'ProfDS',
'ProfD',
'GreD',
'XCurProcD',
'XREExeF',
'UpdRootD',
//http://mxr.mozilla.org/mozilla-release/source/xpcom/build/nsXULAppAPI.h
'UAppData',
'XREExtDL',
'XREExeF',
'started',
'ProfDS',
'started',
'ProfLDS',
'XRESysLExtPD',
'XRESysSExtPD',
'XREUSysExt',
'XREAppDist',
'UpdRootD',
'UpdArchD',
'OSUpdApplyToD'
];
doit();
所以特殊路径词在数组keywords中。了解所有平台的所有路径会很棒。
上面的代码在 Win8.1 上产生了这个,它复制到剪贴板,所以可以在这里运行和粘贴。
相对配置文件(常规方法)
我只为上面的相对路径配置文件粘贴了 Win8.1,其余的我在 cmets 中收集它们:https://gist.github.com/Noitidart/715840fa5008ee032017 因为 Stack Overflow 不允许这么多文本。