我有一个程序可以打开两种类型的文件:.animera
和 .png
。我希望该程序成为 .animera
的默认程序,但不是 .png
的默认程序。我用这个来处理 .animera
文件:
WriteRegStr HKCR '.animera' '' 'AnimeraSprite'
WriteRegStr HKCR 'AnimeraSprite' '' 'Animera Sprite'
WriteRegStr HKCR 'AnimeraSprite\shell' '' 'open'
WriteRegStr HKCR 'AnimeraSprite\shell\open\command' '' '"$INSTDIR\bin\Animera.exe" open "%1"'
WriteRegStr HKCR 'AnimeraSprite\shell\edit\command' '' '"$INSTDIR\bin\Animera.exe" open "%1"'
WriteRegStr HKCR 'AnimeraSprite\DefaultIcon' '' '$INSTDIR\bin\Animera.exe,1'
似乎有十几种方法可以做到这一点,但上面的代码片段工作得很好。鼠标悬停显示文件类型为“Animera Sprite”,显示 图标,双击打开程序。我对 .png
尝试了类似的方法,只是我不希望该程序成为默认的 png 查看器。我只是希望用户可以选择使用这个程序。这是我尝试过的:
WriteRegStr HKCR '.png\OpenWithProgids' 'AnimeraPNG' ''
WriteRegStr HKCR 'AnimeraPNG\shell' '' 'open'
WriteRegStr HKCR 'AnimeraPNG\shell\open\command' '' '"$INSTDIR\bin\Animera.exe" open "%1"'
右键单击 png 文件并将鼠标悬停在“打开方式”上不会在列表中显示该程序。那么我该如何实现这一点呢?
最佳答案
看起来您所做的一切都是正确的,但在某些时候(Windows 8?)Windows 开始需要更多信息才能显示应用程序,并且 MSDN 从未更新。
您至少需要在版本信息或未记录的注册表项中提供公司名称,也许还需要提供应用程序名称:
RequestExecutionLevel User
Name "Test"
OutFile "AnimeraPNG.exe"
!include "LogicLib.nsh"
!include "FileFunc.nsh"
Function .onInit
${GetParameters} $0
${If} $0 != ""
MessageBox mb_ok "File:$0"
Quit
${EndIf}
FunctionEnd
Section
WriteRegStr HKCU 'Software\Classes\.png\OpenWithProgids' 'AnimeraPNG' '' ; WinXP+
WriteRegStr HKCU 'Software\Classes\AnimeraPNG\shell' '' 'open'
WriteRegStr HKCU 'Software\Classes\AnimeraPNG\shell\open\command' '' '"$exepath" "%1"'
SectionEnd
!if 1
VIProductVersion 1.2.3.4
VIAddVersionKey /LANG=0 "CompanyName" "AnimeraPNG fake company"
VIAddVersionKey /LANG=0 "ProductName" "AnimeraPNG product"
VIAddVersionKey /LANG=0 "FileDescription" "AnimeraPNG Application"
!else
Section
WriteRegStr HKCU 'Software\Classes\AnimeraPNG\Application' 'ApplicationName' 'AnimeraPNG'
WriteRegStr HKCU 'Software\Classes\AnimeraPNG\Application' 'ApplicationCompany' 'AnimeraPNG fake company'
;WriteRegStr HKCU 'Software\Classes\AnimeraPNG\Application' 'ApplicationIcon' '$exepath'
;WriteRegStr HKCU 'Software\Classes\AnimeraPNG\Application' 'ApplicationDescription' '...'
;WriteRegStr HKCU 'Software\Classes\AnimeraPNG\Application' 'AppUserModelId' '...'
SectionEnd
!endif
或者只是将其添加为 extra verb :
WriteRegStr HKCU 'Software\Classes\SystemFileAssociations\.png\shell\AnimeraPNG\command' '' '"$exepath" "%1"' ; WinXP+
关于windows - 如何使用NSIS向 "Open With"菜单添加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62769041/