我创建了自己的文件类型(.track),并且能够在我的解决方案的发布选项中设置关联。安装程序后,双击任何.track文件即可打开我的应用程序。发生这种情况时,我希望程序加载双击文件的内容。
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if(args.Length == 1)
{
MessageBox.Show(args[0]); //For Debugging
Application.Run(new TrackerForm(args[0]));
}
else
{
MessageBox.Show(args.Length.ToString()); //Confirms that no arguments are passed.
Application.Run(new TrackerForm());
}
}
我假设双击文件的路径将通过命令行参数传递给应用程序。但是,双击我关联的文件类型的文件根本不会将任何参数传递给我的可执行文件。双击相关可执行文件时究竟发生了什么?我需要做什么才能让我的程序加载在Windows资源管理器中双击的文件?
当我使用文件路径作为命令行参数进行调试时,我的程序运行完美,所以我认为这不是由于打开文件时出错。
答案 0 :(得分:0)
双击文件时,shell会使用"打开"动词。 "开放" verb运行应用程序如下:
"My Program.exe" "%1"
"%1"是您双击的文件的路径。您可以查看此MDSN页面了解更多信息。
答案 1 :(得分:0)
TJ Moats提供的解决方案有效。但是,我想记录我的步骤。
要在注册表中找到正确的位置,您需要知道扩展名的ProgID。
在解决方案资源管理器中,您可以通过右键单击项目名称找到它,然后单击属性>发布>选项......>文件关联。就我而言,这些是我给出的设置:
Extension = .track | Description = File Tracker Data File | ProgID = .trackfile | Icon = Tracker.ico
打开regedit,然后导航到HKEY_CLASSES_ROOT> 。 [ProgID]> shell>打开>命令。就我而言,关键在于:
HKEY_CLASSES_ROOT\.trackfile\shell\open\command
双击"(默认)"编辑密钥的数据。您将需要两件事,即可执行文件的确切路径,以及"%1"。在我的例子中,我制作的.exe被安装到App Data中的这个目录:
C:\Users\Bill\AppData\Local\Apps\2.0\W82CG2C9.L4C\3Q4LH0K1.HXH\file..tion_6762072d39e56a94_0001.0000_f0f46736a74a5052\FileTracker.exe
现在,删除"(默认)"内的值。将其替换为.exe的路径。不要包含引号。使用单个空格跟随.exe的路径,然后按"%1"。您必须包含%1周围的引号。
就我而言,新值与下面一行中显示的完全相同:
C:\Users\Bill\AppData\Local\Apps\2.0\W82CG2C9.L4C\3Q4LH0K1.HXH\file..tion_6762072d39e56a94_0001.0000_f0f46736a74a5052\FileTracker.exe "%1"
一旦新值被接受,我不需要做任何其他事情。现在,当我双击.track文件时,Windows资源管理器将双击文件的路径作为命令行参数传递给我的FileTracker.exe可执行文件。
但是,每次发布新版本时我都需要重复此过程,因为新的.exe将位于AppData下的不同文件夹中。