Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何使用NSIS将程序添加到;以“打开”;菜单_Windows_Windows 10_Registry_Nsis - Fatal编程技术网

Windows 如何使用NSIS将程序添加到;以“打开”;菜单

Windows 如何使用NSIS将程序添加到;以“打开”;菜单,windows,windows-10,registry,nsis,Windows,Windows 10,Registry,Nsis,我有一个程序可以打开两种类型的文件:.animera和.png。我希望该程序是.animera的默认程序,但不是.png的默认程序。我用这个来处理.animera文件: WriteRegStr HKCR '.animera' '' 'AnimeraSprite' WriteRegStr HKCR 'AnimeraSprite' '' 'Animera Sprite' WriteRegStr HKCR 'AnimeraSprite\shell' '' 'open' WriteRegStr HKCR

我有一个程序可以打开两种类型的文件:
.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
或者将其添加为:

WriteRegStr HKCU 'Software\Classes\SystemFileAssociations\.png\shell\AnimeraPNG\command' '' '"$exepath" "%1"' ; WinXP+