Gostaria de associar .docx ao OpenOffice
$extension = ".docx"
$executable = "$MyPrograms\LibreOffice\program\swriter.exe"
$fileType = "docxfile"
if (Test-Path $executable) {
$elevated = @"
cmd /c "assoc $extension=$fileType"
cmd /c 'ftype $fileType="$executable" "%1" "%*"'
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Set-ItemProperty -Path "HKCR:\$fileType" -Name "(Default)" -Value "$fileType file" -ErrorAction Stop
"@
Start-Process powershell -WindowStyle Hidden -Verb runAs -ArgumentList "-Command", $elevated
Write-Host "`'$extension`' has been associated with `'$executable`'."
} else {
Write-Host "`'$executable`' does not exist, so no association for `'$extension`' has been created."
Isso tem alguns problemas:
- Em primeiro lugar, ele não pode lidar com arquivos com espaços, então "Este arquivo.docx" exibirá duas caixas de diálogo de erro "'Este' não foi encontrado", então "'Arquivo.docx' não foi encontrado", então a sintaxe ftype precisa lidar corretamente com
swriter.exe
o nome completo do arquivo, como posso fazer isso? - Em segundo lugar, mesmo se eu usar um nome sem espaços, "MyFile.docx", tudo o que acontece é que um console abre mostrando a saída de ajuda
swriter.exe
e não abre o aplicativo, então de alguma forma apenas passar um arquivo paraswriter.exe
não é suficiente para obter o programa a ser aberto. Como posso consertar isso?
Se o LibreOffice estiver instalado, você já deverá ter o ProgID
LibreOffice.Docx
definido emHKCR
.Se por algum motivo você não fizer isso,
HKCR\LibreOffice.Docx\shell\open\command
"C:\Program Files\LibreOffice\program\swriter.exe" -o "%1"
Equivalente puro do PowerShell
Executado a partir de um console Admin PowerShell , isso cria as mesmas chaves/entradas:
Saída:
Com a resposta de @Keith Miller acima, posso fazer meu código original funcionar para associar extensões dinamicamente
swriter.exe
da seguinte maneira: