我在Windows中使用"ftype"和"assoc"注册我的文件扩展名,这是有效的.现在我有看起来很糟糕的默认图标,我怎么能改变这个图标?
所以我很高兴今天早上正在开发一个大量使用自定义.xml配置文件的项目.
突然之间,每当我在解决方案资源管理器中双击.xml文件时,它都会在记事本中而不是在Visual Studio中打开.
认为这是Windows文件关联,我右键单击资源管理器中的文件,选择打开方式>>选择默认值,然后选择Visual Studio 2008.
但问题仍然存在 - 现在当我从资源管理器中打开文件时,Visual Studio打开,然后打开记事本.
毋庸置疑,这是非常令人沮丧的,谷歌并没有多大帮助.有没有其他人遇到过这个问题,你做了什么呢?
笔记:
我需要获取当前与当前用户的文件扩展名相关联的程序的名称.如果右键单击文件并选择属性,那么我需要的是"打开方式"行右侧的程序名称.
例如,对于".xls",我希望能够得到答案"Microsoft Office Excel",或者用户拥有的任何程序作为打开.xls文件的默认程序.
我已经确定它并不像进入HKEY_CLASSES_ROOT并选择它那么容易,因为它也可以在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER或HKEY_USERS中指定.
也许我需要知道的是Windows用来确定这个以及如何到达每个位置的啄食顺序.当然,执行此操作的Windows API调用将是理想的.
这是一个类似的问题: 如何使用Delphi从文件扩展名获取图标和描述?但是这个问题只回答了如何获得扩展的描述和相关程序的图标.我找不到扩展它的方法来获取相关程序的名称.
我正在使用Delphi 2009,需要一个适用于Windows XP,Vista和7的解决方案.
谢谢大家的答案.
我认为可执行文件的名称毕竟不在注册表中.在广泛浏览了将提供名称的Windows API之后,我找不到一个.
我认为Mef的答案是最好的.从程序可执行文件中包含的信息中获取可执行文件的名称.
如此多的程序在"默认程序"控制面板小程序下提供了可能的扩展和协议列表.更确切地说,"设置默认PRogram".(Vista和7)
我希望在该列表中添加我的程序并设置它可以处理的一些扩展.
还有一件事.我的程序支持用于打开更多文件的插件,因此列表应该是动态的(我可以随时添加更多扩展甚至协议)
顺便说一下,是的,我知道,这不是一个编程问题.这是我的谦虚猜测,这是一个注册问题.所以UAC不会成为问题!
我需要为.py文件设置关联以使用特定的python版本执行.但我需要仅为单个cmd.exe会话建立此关联(并行会话不应受影响).Windows是否允许这样做?
我怀疑答案是否定的,但是我希望看到一些证据,然后再将这个功能转化为virtualenv.
我使用Java创建了一个文本编辑器,并使用Netbeans将其打包在一个jar文件中.现在我创建了一个文本文件,扩展名为".text".我在Windows 7上,所以使用它的属性窗口我将默认的打开程序更改为我的文本编辑器的jar文件.
现在,当我双击".text"扩展名的文件时,windows会显示一个对话框,说"{file name}不是有效的win32应用程序".
请帮帮我..
谢谢.
我想做以下事情:
用例是:双击文件,立即弹出相应的图表.
我想知道如何编写python脚本才能做到这一点.此外,窗口"打开"对话框只允许我选择可执行文件(*.exe).如果我选择"fooOpener.py",它就不起作用.
我的.Net Windows窗体应用程序生成PDF报告,我想向用户显示该报告.
而不是假设客户端PC安装了PDF查看器并盲目地将PDF放在操作系统中打开,有没有办法事先检查客户端上的文件关联列表,然后显示" 你需要一个PDF查看器安装的应用程序 - 这里有几个建议.. "对话框,如果PDF不是注册类型?
我发现了很多关于更改或注册文件关联的问题和答案,但我只是想要一种简单的方法来查询列表,而不是更改它.
我想要一个适用于Windows XP以上的解决方案(WinXP,Vista,Win7).
谢谢你的帮助
我使用Qt 5.3.2开发了一个Mac应用程序.此应用程序处理具有特定扩展名的文件(假设.xyz).
我创建了一个名为XYZ.icns的图标文件,并将其添加到我的应用程序包资源文件夹(MyApp.app/Contents/Resources/XYZ.icns)中.
我还修改了bundle的Info.plist文件以设置文件关联.我添加了这个条目:
<key>CFBundleDocumentTypes</key>
<array>
<!-- Registered file accociation -->
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeName</key>
<string>XYZ</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>xyz</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>XYZ</string>
</dict>
<array>
Run Code Online (Sandbox Code Playgroud)
结果:文件关联工作(双击文件确实打开了我的应用程序)但是,图标没有被替换(仍然显示空白文档图标).
有什么我错过了吗?我查看了其他应用程序的示例,似乎没有什么比我做的更多.
编辑:我做了一些测试.我使用以下命令转储了启动服务数据:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister -dump
Run Code Online (Sandbox Code Playgroud)
在结果中,我可以在文件中找到包含图标信息的文件类型:
...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle id: 105396
...
path: /Applications/MyApp.app
name: MyApp
...
--------------------------------------------------------
claim id: 27628
name: XYZ
rank: Default
reqCaps:
roles: Editor
flags: relative-icon-path doc-type
icon: Contents/Resources/XYZ.icns
bindings: .xyz
--------------------------------------------------------------------------------
...
Run Code Online (Sandbox Code Playgroud)
编辑2:过了一段时间,它终于开始自己工作了.一夜之间,有一个操作系统更新已安装,我还必须关闭计算机(启动服务可能自己刷新了一些东西).我会将我的问题更新为:如何确保启动服务在安装或修改应用程序时刷新关联的文件图标?
我已经将以下代码段添加到我的package.json:
"build": {
"fileAssociations": [
{
"ext": "asdf",
"name": "ASDF File",
"role": "Editor"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是生成的安装程序不会将我的应用程序分配给asdf扩展程序。(在 Windows 10 上测试)
我也查了一下,如何编辑setupEvents.js文件。它包含以下部分:
case '--squirrel-updated':
// Optionally do things such as:
// - Add your .exe to the PATH
// - Write to the registry for things like file associations and
// explorer context menus
Run Code Online (Sandbox Code Playgroud)
但是我找不到一个例子,如何归档注册表写入部分。
javascript installation file-association electron squirrel.windows
file-association ×10
windows ×6
.net ×2
c# ×2
python ×2
delphi ×1
electron ×1
file-type ×1
icons ×1
info.plist ×1
installation ×1
java ×1
javascript ×1
macos ×1
qt ×1
registry ×1
windows-7 ×1