Eu resolvi o problema com um script personalizado de pós-atualização, que corrige as entradas do Registro e os atalhos do Menu Iniciar para adicionar o argumento --disable-direct-write
.
Atalhos
Como afirmei na resposta do @ codeSwift4Life, acrescentar --disable-direct-write
não funcionará com atalhos para o processo Update.exe
(que na verdade é um Squirrel ). No entanto, eu fiz descobri como anexar argumentos ao comando --processStart atom.exe
. Veja esta questão .
Portanto, se você deseja alterar o atalho Atom para acrescentar --disable-direct-write
, é necessário alterá-lo de:
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe
para uma das seguintes linhas:
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"
Menu de contexto
Para alterar o menu de contexto "Abrir com Atom", você precisa atualizar algumas entradas do Registro. Altere-os de:
X:\Path\to\atom\app-1.0.xx\atom.exe "%V"
para:
X:\Path\to\atom\app-1.0.xx\atom.exe "%V" --disable-direct-write
Script de pós-atualização automatizado
Mas, como há muitas entradas de registro e você precisa repetir tudo após cada atualização (e as atualizações são muito frequentes), as alterações manuais não são viáveis.
Por isso, criei um script de pós-atualização automatizado, que atualiza tudo automaticamente. Você só precisa executá-lo após cada atualização do Atom.
A base do meu script de pós-atualização era este script de café , que é na verdade o script de ações que substitui todas as nossas alterações manuais.
Você precisa alterar o script mencionado da seguinte maneira:
Alterar:
createShortcuts = (callback) ->
spawnUpdate(['--createShortcut', exeName], callback)
para:
createShortcuts = (callback) ->
spawnUpdate(['--createShortcut', exeName, '--process-start-args', '--disable-direct-write'], callback)
Alterar:
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)
para:
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)
A variável atomExe
é definida da seguinte forma (coloque-a no topo, mas após as linhas 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')
Além disso, você precisa encontrar / substituir process.execPath
por atomExe
. Isso é necessário porque o script será executado diretamente via Node e a variável process
aponta para Node em vez de Atom.
Por fim, adicione as seguintes linhas ao final do script para executar atalhos e atualizações do registro:
# Update shortcuts, install context menu
updateShortcuts ->
installContextMenu ->
O script é executado com coffee squirrel-update.coffee
. Você deve colocá-lo em uma nova subpasta dentro da pasta AppData\Local\atom
. Você também precisará dos pacotes do nó fs-plus
e coffee-script
para executar o script com êxito.