Я решил проблему с помощью специального сценария после обновления, который исправляет записи реестра и ярлыки меню «Пуск», чтобы добавить аргумент --disable-direct-write
.
Ярлыки
Как я уже говорил в ответе @ codeSwift4Life, добавление --disable-direct-write
не будет работать с ярлыками для процесса Update.exe
(который на самом деле является программой Squirrel ). Тем не менее, я узнал, как добавить аргументы команды --processStart atom.exe
Смотрите эту проблему.
Поэтому, если вы хотите изменить ярлык Atom для добавления --disable-direct-write
, вы должны изменить его с:
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe
на одну из следующих строк:
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe -a "--disable-direct-write"
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe --process-start-args "--disable-direct-write"
Контекстное меню
Чтобы изменить контекстное меню "Открыть с помощью Atom", необходимо обновить несколько записей реестра. Измените их с:
X:\Path\to\atom\app-1.0.xx\atom.exe "%V"
чтобы:
X:\Path\to\atom\app-1.0.xx\atom.exe "%V" --disable-direct-write
Автоматический скрипт после обновления
Но поскольку в реестре много записей и вам приходится повторять все после каждого обновления (а обновления происходят очень часто), ручные изменения неосуществимы.
Поэтому я создал автоматический скрипт после обновления, который обновляет все автоматически. Вам просто нужно запускать его после каждого обновления Atom.
Основой моего скрипта после обновления был этот кофейный скрипт, который на самом деле является стандартным скриптом, который отменяет все наши ручные изменения.
Вы должны изменить вышеупомянутый скрипт следующим образом:
Изменить:
createShortcuts = (callback) ->
spawnUpdate(['--createShortcut', exeName], callback)
чтобы:
createShortcuts = (callback) ->
spawnUpdate(['--createShortcut', exeName, '--process-start-args', '--disable-direct-write'], callback)
Изменить:
installMenu = (keyPath, arg, callback) ->
args = [keyPath, '/ve', '/d', 'Open with Atom']
addToRegistry args, ->
args = [keyPath, '/v', 'Icon', '/d', process.execPath]
addToRegistry args, ->
args = ["#{keyPath}\\command", '/ve', '/d', "#{process.execPath} \"#{arg}\""]
addToRegistry(args, callback)
чтобы:
installMenu = (keyPath, arg, callback) ->
args = [keyPath, '/ve', '/d', 'Open with Atom']
addToRegistry args, ->
args = [keyPath, '/v', 'Icon', '/d', atomExe]
addToRegistry args, ->
args = ["#{keyPath}\\command", '/ve', '/d', "#{atomExe} \"#{arg}\" --disable-direct-write"]
addToRegistry(args, callback)
Переменная atomExe
определяются следующим образом (поместить ее в верхней части, но после того , как require
строк):
# Get the latest version of atom.exe
parentDir = fs.listSync('..').filter (x) -> x.indexOf('app-') > -1;
[..., atomDir] = parentDir
atomExe = path.join(path.resolve(atomDir), 'atom.exe')
Кроме того, вы должны найти / заменить process.execPath
на atomExe
. Это необходимо, потому что сценарий будет запускаться напрямую через Node, а переменная process
указывает на Node вместо Atom.
Наконец, добавьте следующие строки в конец скрипта, чтобы выполнить ярлыки и обновления реестра:
# Update shortcuts, install context menu
updateShortcuts ->
installContextMenu ->
Сценарий выполнен с coffee squirrel-update.coffee
. Вы должны поместить его в новую подпапку в папке AppData\Local\atom
. Вам также понадобятся пакеты узлов fs-plus
и coffee-script
для успешного запуска сценария.