我的.Net Windows窗体应用程序生成PDF报告,我想向用户显示该报告.
而不是假设客户端PC安装了PDF查看器并盲目地将PDF放在操作系统中打开,有没有办法事先检查客户端上的文件关联列表,然后显示" 你需要一个PDF查看器安装的应用程序 - 这里有几个建议.. "对话框,如果PDF不是注册类型?
我发现了很多关于更改或注册文件关联的问题和答案,但我只是想要一种简单的方法来查询列表,而不是更改它.
我想要一个适用于Windows XP以上的解决方案(WinXP,Vista,Win7).
谢谢你的帮助
当我输入时,assoc .py我得到了.py=py_auto_file.当我输入时,ftype py_auto_file我得到了py_auto_file="C:\Program Files\Adobe\Photoshop 7.0\Photoshop.exe" "%1"
我怎么做py_auto_file="C:\Python27"?
我使用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
我知道怎么做了,之前我去过http://www.codeproject.com/KB/vb/VBFileAssociation.aspx.我的问题是关于做了什么,是否有可能扭转它?如果你不知道你的程序在哪里,你现在只是测试它会怎么样?有没有办法让它"找到"你的程序,或者一种简单的方法来编辑它的打开位置?就此而言,是否可以判断文件是否已经关联,尝试重新关联是一个问题吗?最后,如何设置它使用的.ico文件?
感谢您的帮助,我对注册表几乎一无所知,这让我很困惑...
我指的是Windows 7.
我有一些代码将某个扩展名与我的应用程序相关联,如webJose在下一页所提出的: 哪些注册表项负责文件扩展名关联? (但我按照建议正确写入HKEY_CURRENT_USER\Software\Classes而不是HKEY_CLASSES_ROOT)
以上工作最初,或者如果没有与扩展相关联的其他程序.但是,在使用Windows 7内置的"选择默认程序..."(在"打开方式"下的文件右键单击上下文菜单下找到)后,它会将扩展名与您选择的任何新程序重新关联.
此时发生的情况是系统更改了"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts \\ UserChoice",因此新选择的程序将接管.
运行上面的代码,重新获得对扩展的控制将无法正常工作.重新获得控制权的唯一方法是:
我的问题是:有没有办法以编程方式实现这一目标?在与另一个程序关联后,可以更改哪些注册表值以重新获得对扩展的控制权?
我知道很明显,如果用户通过资源管理器将关联的应用程序设置为扩展,那么预期它会以相同的方式再次将扩展重新关联到不同的应用程序.
但问题是我的应用程序中有一个按钮,它使用上面提到的代码来检查与我的应用程序的扩展关联.不幸的是,在上述情况下,我的应用程序会显示一条消息,确认扩展已经成功关联,而不是!那么有办法解决这个问题吗?
virtualenv不将.py(w)文件与virtualenv的Python可执行文件版本相关联的原因是什么?考虑到Windows上没有像shebang这样的机制,这对于Windows上的virtualenv来说似乎是一个理想的任务.
一个例子:
如果您打开并运行Visual Studio(2010),然后双击PC桌面上的misc*.cs文件,该文件将在当前运行的Visual Studio实例中打开,而不是打开另一个VS实例.
如何让我自己的C#程序模仿这种行为?
换句话说,如果我有一个文件类型,如*.myfile与我的程序相关联,并且用户在Windows资源管理器中双击*.myfile,并且...... 我的程序已经运行 .....它应该打开文件而不启动Windows程序的另一个实例.如果程序未运行,则Windows可以正常启动实例.
请注意,我的程序的多个实例是允许的 - 与Visual Studio相同.
任何建议,将不胜感激 !!
在我的应用程序中,我希望能够使用与不同扩展名相关联的程序执行具有任意名称和扩展名的文件.
例如,假设我有一个名为的文件file.dat,但我想用记事本打开它,就像它被命名file.txt或file.dat.txt.此外,我没有权限重命名该文件,所以这是不可能的.
如果文件被称为file.txt,我可以调用ShellExecute的.但是在打电话时失败了file.dat; Windows抱怨该文件没有关联.
我不想对特定的可执行文件进行硬编码,因为(在上面的示例中)最终用户可以.txt使用Wordpad而不是记事本来关联文件.在这种情况下,我希望file.dat用Wordpad打开我.
我正在使用 jpackage 来打包我的 Java 应用程序并想用它来创建文件关联。我看到该实用程序通过 --file-associations 命令支持这一点。使用它,您可以将其指向包含文件关联信息的文件。
有谁知道可以更好地描述如何创建此文件关联文件的文档?该实用程序本身的帮助文档描述了必须出现在其中的键,但没有提示如何对其进行格式化。
以下是打包程序在其自己的帮助中列出的内容:
--file-associations — 包含键值对列表的属性文件的路径(绝对路径或相对于当前目录)。键“extension”、“mime-type”、“icon”和“description”可用于描述关联。此选项可以多次使用。
这里有没有人知道我在哪里可以找到正确编写的示例或更详细的文档,说明该功能的确切使用方式?如果有人能指出我正确的方向,我将不胜感激。
file-association ×10
c# ×2
python ×2
windows ×2
.net ×1
cmd ×1
delphi ×1
double-click ×1
electron ×1
info.plist ×1
installation ×1
instance ×1
java ×1
javascript ×1
macos ×1
packaging ×1
qt ×1
registry ×1
shebang ×1
shellexecute ×1
vb.net ×1
virtualenv ×1
winapi ×1
windows-7 ×1
windows-xp ×1