OSX - 更改特殊路径,特别是更新传送到的文件夹
OSX - Change special paths, especialy folder to which update is delivered
这是一个 firefox 插件问题,只是为你标记 osx。
在 MacOS X 上,我已将 /Applications/Firefox.app
的所有内容复制到 /Users/noit/Desktop/custom profile.app
。除了所有文件都被复制为别名(文件夹被复制为文件夹)。只有非别名文件是 custom profile.app/Contents/Resources/firefox.icns
中的图标,我用自定义图标覆盖了那个。 (准确地说,plist.info 已被复制,但 CFBundleExecutable 已更改为我放置在 MacOS 文件夹中的新执行程序,它使用命令行参数从 MacOS 启动 firefox,以确保正确的配置文件启动)
这允许我 运行 作为 "shortcut" 的单独配置文件。现在,如果用户 "Keeps in Dock" 显示停靠栏图标,或者在重新启动计算机时标记 "Re-open windows from last time",或者如果用户右键单击停靠栏图标并显示 "Open at log in",或者如果用户重新启动 Firefox,它会正确启动进入正确的配置文件。额外的好处是它遵循自定义图标。
从这里运行创建配置文件时出现的一些问题:
- 更新时,文件写入
/Desktop/custom profile.app
,而不是 Applications/Firefox.app
。所以现在在浏览器启动时,我测试它是否是第一次在更新配置文件中启动,如果是,那么我确保将新制作的文件复制回 Applications/Firefox.app
并将它们设置为我的别名 /Desktop/custom profile.app
. __Is 我有什么办法可以更改路径,使其更新为 Applications/Firefox.app
?
- 另一个问题是,一些特殊路径现在指向不同,比如
FileUtils.getFile('XREExeF', []).path
现在是 /Desktop/custom profile.app/Contents/MacOS/firefox
而不是 Applications/Firefox.app/....
,我能不能把它改成应用程序路径?
谢谢
编辑:
这是右边的常规应用和左边的别名复制应用之间的区别:
https://www.diffchecker.com/lihx3o8w
所以改变的键一共是20个:
Key Regular.app Alias.app
`XREExeF` `/Applications/Firefox.app/Contents/MacOS/firefox` `/Users/noit/Desktop/Firefox - dev.app/Contents/MacOS/firefox`
`ProfLDS` `/Users/noit/Library/Caches/Firefox/Profiles/jv5ijq47.Unnamed Profile 1` `/Users/noit/Library/Application Support/Firefox/Profiles/jv5ijq47.Unnamed Profile 1`
`XREAppDist` `/Applications/Firefox.app/Contents/Resources/distribution` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/distribution`
`UpdRootD` `/Users/noit/Library/Caches/Mozilla/updates/Applications/Firefox` `/Users/noit/Library/Caches/Mozilla/updates/Users/noit/Desktop/Firefox - dev`
`DefRt` `/Applications/Firefox.app/Contents/Resources/browser/defaults` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/defaults`
`PrfDef` `/Applications/Firefox.app/Contents/Resources/defaults/pref` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/defaults/pref`
`profDef` `/Applications/Firefox.app/Contents/Resources/browser/defaults/profile` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/defaults/profile`
`ProfDefNoLoc` `/Applications/Firefox.app/Contents/Resources/browser/defaults/profile` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/defaults/profile`
`ARes` `/Applications/Firefox.app/Contents/Resources/browser/res` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/res`
`AChrom` `/Applications/Firefox.app/Contents/Resources/browser/chrome` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/chrome`
`APlugns` `/Applications/Firefox.app/Contents/Resources/browser/plugins` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/plugins`
`SrchPlugns` `/Applications/Firefox.app/Contents/Resources/browser/searchplugins` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/searchplugins`
`ProfLD` `/Users/noit/Library/Caches/Firefox/Profiles/jv5ijq47.Unnamed Profile 1` `/Users/noit/Library/Application Support/Firefox/Profiles/jv5ijq47.Unnamed Profile 1`
`XPIClnupD` `/Applications/Firefox.app/Contents/Resources/browser` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser`
`CurProcD` `/Applications/Firefox.app/Contents/Resources/browser` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser`
`XCurProcD` `/Applications/Firefox.app/Contents/Resources/browser` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser`
`XpcomLib` `/Applications/Firefox.app/Contents/MacOS/XUL` `/Users/noit/Desktop/Firefox - dev.app/Contents/MacOS/XUL`
`GreD` `/Applications/Firefox.app/Contents/Resources` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources`
`GreBinD` `/Applications/Firefox.app/Contents/MacOS` `/Users/noit/Desktop/Firefox - dev.app/Contents/MacOS`
如果你复制粘贴下面的代码,如果你这样做,它将替换路径:Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get('XREExeF', Ci.nsIFile).path;
但如果你这样做 FileUtils.getFile('XREExeF', [])
,它会抛出
[Exception... "Component returned failure code: 0x80520015
(NS_ERROR_FILE_ACCESS_DENIED) [nsIFile.create]" nsresult: "0x80520015
(NS_ERROR_FILE_ACCESS_DENIED)" location: "JS frame ::
resource://gre/modules/FileUtils.jsm :: FileUtils_getDir :: line 70"
data: no]
关于如何修复此错误的任何想法?
我认为我真的走对了路!谢谢! :D
function do_get_file(path, allowNonexistent) { //https://dxr.mozilla.org/mozilla-central/source/mobile/android/base/tests/robocop_head.js#803
try {
let lf = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("CurWorkD", Components.interfaces.nsILocalFile);
let bits = path.split("/");
for (let i = 0; i < bits.length; i++) {
if (bits[i]) {
if (bits[i] == "..")
lf = lf.parent;
else
lf.append(bits[i]);
}
}
if (!allowNonexistent && !lf.exists()) {
// Not using do_throw(): caller will continue.
_passed = false;
var stack = Components.stack.caller;
console.error("TEST-UNEXPECTED-FAIL | " + stack.filename + " | [" +
stack.name + " : " + stack.lineNumber + "] " + lf.path +
" does not exist\n");
}
return lf;
}
catch (ex) {
console.error(ex.toString(), Components.stack.caller);
}
return null;
}
var gTestID = 'gTestID/';
function getApplyDirPath() {
return gTestID + "/dir.app/";
}
function getApplyDirFile(aRelPath, aAllowNonexistent) {
let relpath = getApplyDirPath() + (aRelPath ? aRelPath : "");
return do_get_file(relpath, aAllowNonexistent);
}
var DIR_MACOS = 'DIR_MACOS';
var FILE_APP_BIN = 'FILE_APP_BIN';
var XRE_EXECUTABLE_FILE = 'XREExeF';
var XRE_UPDATE_ROOT_DIR = 'XRE_UPDATE_ROOT_DIR';
let dirProvider = {
getFile: function AGP_DP_getFile(aProp, aPersistent) {
aPersistent.value = true;
switch (aProp) {
case XRE_EXECUTABLE_FILE:
return getApplyDirFile(DIR_MACOS + FILE_APP_BIN, true);
break;
}
return null;
},
QueryInterface: function(aIID) {
if (aIID.equals(Ci.nsIDirectoryServiceProvider) ||
aIID.equals(Ci.nsISupports))
return this;
throw Cr.NS_ERROR_NO_INTERFACE;
}
};
var ds = Services.dirsvc.QueryInterface(Ci.nsIDirectoryService);
ds.QueryInterface(Ci.nsIProperties).undefine('XREExeF');
console.log(rez)
ds.registerProvider(dirProvider);
这是一个 firefox 插件问题,只是为你标记 osx。
在 MacOS X 上,我已将 /Applications/Firefox.app
的所有内容复制到 /Users/noit/Desktop/custom profile.app
。除了所有文件都被复制为别名(文件夹被复制为文件夹)。只有非别名文件是 custom profile.app/Contents/Resources/firefox.icns
中的图标,我用自定义图标覆盖了那个。 (准确地说,plist.info 已被复制,但 CFBundleExecutable 已更改为我放置在 MacOS 文件夹中的新执行程序,它使用命令行参数从 MacOS 启动 firefox,以确保正确的配置文件启动)
这允许我 运行 作为 "shortcut" 的单独配置文件。现在,如果用户 "Keeps in Dock" 显示停靠栏图标,或者在重新启动计算机时标记 "Re-open windows from last time",或者如果用户右键单击停靠栏图标并显示 "Open at log in",或者如果用户重新启动 Firefox,它会正确启动进入正确的配置文件。额外的好处是它遵循自定义图标。
从这里运行创建配置文件时出现的一些问题:
- 更新时,文件写入
/Desktop/custom profile.app
,而不是Applications/Firefox.app
。所以现在在浏览器启动时,我测试它是否是第一次在更新配置文件中启动,如果是,那么我确保将新制作的文件复制回Applications/Firefox.app
并将它们设置为我的别名/Desktop/custom profile.app
. __Is 我有什么办法可以更改路径,使其更新为Applications/Firefox.app
? - 另一个问题是,一些特殊路径现在指向不同,比如
FileUtils.getFile('XREExeF', []).path
现在是/Desktop/custom profile.app/Contents/MacOS/firefox
而不是Applications/Firefox.app/....
,我能不能把它改成应用程序路径?
谢谢
编辑:
这是右边的常规应用和左边的别名复制应用之间的区别:
https://www.diffchecker.com/lihx3o8w
所以改变的键一共是20个:
Key Regular.app Alias.app
`XREExeF` `/Applications/Firefox.app/Contents/MacOS/firefox` `/Users/noit/Desktop/Firefox - dev.app/Contents/MacOS/firefox`
`ProfLDS` `/Users/noit/Library/Caches/Firefox/Profiles/jv5ijq47.Unnamed Profile 1` `/Users/noit/Library/Application Support/Firefox/Profiles/jv5ijq47.Unnamed Profile 1`
`XREAppDist` `/Applications/Firefox.app/Contents/Resources/distribution` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/distribution`
`UpdRootD` `/Users/noit/Library/Caches/Mozilla/updates/Applications/Firefox` `/Users/noit/Library/Caches/Mozilla/updates/Users/noit/Desktop/Firefox - dev`
`DefRt` `/Applications/Firefox.app/Contents/Resources/browser/defaults` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/defaults`
`PrfDef` `/Applications/Firefox.app/Contents/Resources/defaults/pref` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/defaults/pref`
`profDef` `/Applications/Firefox.app/Contents/Resources/browser/defaults/profile` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/defaults/profile`
`ProfDefNoLoc` `/Applications/Firefox.app/Contents/Resources/browser/defaults/profile` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/defaults/profile`
`ARes` `/Applications/Firefox.app/Contents/Resources/browser/res` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/res`
`AChrom` `/Applications/Firefox.app/Contents/Resources/browser/chrome` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/chrome`
`APlugns` `/Applications/Firefox.app/Contents/Resources/browser/plugins` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/plugins`
`SrchPlugns` `/Applications/Firefox.app/Contents/Resources/browser/searchplugins` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser/searchplugins`
`ProfLD` `/Users/noit/Library/Caches/Firefox/Profiles/jv5ijq47.Unnamed Profile 1` `/Users/noit/Library/Application Support/Firefox/Profiles/jv5ijq47.Unnamed Profile 1`
`XPIClnupD` `/Applications/Firefox.app/Contents/Resources/browser` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser`
`CurProcD` `/Applications/Firefox.app/Contents/Resources/browser` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser`
`XCurProcD` `/Applications/Firefox.app/Contents/Resources/browser` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources/browser`
`XpcomLib` `/Applications/Firefox.app/Contents/MacOS/XUL` `/Users/noit/Desktop/Firefox - dev.app/Contents/MacOS/XUL`
`GreD` `/Applications/Firefox.app/Contents/Resources` `/Users/noit/Desktop/Firefox - dev.app/Contents/Resources`
`GreBinD` `/Applications/Firefox.app/Contents/MacOS` `/Users/noit/Desktop/Firefox - dev.app/Contents/MacOS`
如果你复制粘贴下面的代码,如果你这样做,它将替换路径:Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get('XREExeF', Ci.nsIFile).path;
但如果你这样做 FileUtils.getFile('XREExeF', [])
,它会抛出
[Exception... "Component returned failure code: 0x80520015 (NS_ERROR_FILE_ACCESS_DENIED) [nsIFile.create]" nsresult: "0x80520015 (NS_ERROR_FILE_ACCESS_DENIED)" location: "JS frame :: resource://gre/modules/FileUtils.jsm :: FileUtils_getDir :: line 70" data: no]
关于如何修复此错误的任何想法?
我认为我真的走对了路!谢谢! :D
function do_get_file(path, allowNonexistent) { //https://dxr.mozilla.org/mozilla-central/source/mobile/android/base/tests/robocop_head.js#803
try {
let lf = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("CurWorkD", Components.interfaces.nsILocalFile);
let bits = path.split("/");
for (let i = 0; i < bits.length; i++) {
if (bits[i]) {
if (bits[i] == "..")
lf = lf.parent;
else
lf.append(bits[i]);
}
}
if (!allowNonexistent && !lf.exists()) {
// Not using do_throw(): caller will continue.
_passed = false;
var stack = Components.stack.caller;
console.error("TEST-UNEXPECTED-FAIL | " + stack.filename + " | [" +
stack.name + " : " + stack.lineNumber + "] " + lf.path +
" does not exist\n");
}
return lf;
}
catch (ex) {
console.error(ex.toString(), Components.stack.caller);
}
return null;
}
var gTestID = 'gTestID/';
function getApplyDirPath() {
return gTestID + "/dir.app/";
}
function getApplyDirFile(aRelPath, aAllowNonexistent) {
let relpath = getApplyDirPath() + (aRelPath ? aRelPath : "");
return do_get_file(relpath, aAllowNonexistent);
}
var DIR_MACOS = 'DIR_MACOS';
var FILE_APP_BIN = 'FILE_APP_BIN';
var XRE_EXECUTABLE_FILE = 'XREExeF';
var XRE_UPDATE_ROOT_DIR = 'XRE_UPDATE_ROOT_DIR';
let dirProvider = {
getFile: function AGP_DP_getFile(aProp, aPersistent) {
aPersistent.value = true;
switch (aProp) {
case XRE_EXECUTABLE_FILE:
return getApplyDirFile(DIR_MACOS + FILE_APP_BIN, true);
break;
}
return null;
},
QueryInterface: function(aIID) {
if (aIID.equals(Ci.nsIDirectoryServiceProvider) ||
aIID.equals(Ci.nsISupports))
return this;
throw Cr.NS_ERROR_NO_INTERFACE;
}
};
var ds = Services.dirsvc.QueryInterface(Ci.nsIDirectoryService);
ds.QueryInterface(Ci.nsIProperties).undefine('XREExeF');
console.log(rez)
ds.registerProvider(dirProvider);