gpt4 book ai didi

installation - 设置注册表以控制将文件类型与应用程序关联时的工作目录

转载 作者:行者123 更新时间:2023-12-02 23:01:20 25 4
gpt4 key购买 nike

我正在使用 Inno 作为安装程序,并且我想将文件类型与我的应用程序关联:

Root: HKCR; Subkey: ".rpl"; ValueType: string; ValueName: ""; ValueData: "MyReplay"; Flags: uninsdeletevalue;
Root: HKCR; Subkey: "MyReplay"; ValueType: string; ValueName: ""; ValueData: "Replay File"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "MyReplay\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\MyApp.ico,0"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "MyReplay\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\MyApp.exe"" ""%1"""; Flags: uninsdeletekey;

现在,双击 .rpl 文件会启动应用程序,但工作目录似乎是 .rpl 文件所在的位置,因此应用程序会崩溃,因为它无法加载任何数据。是否可以设置注册表来控制文件关联的启动/工作目录以及启动的应用程序?或者我的应用程序本身是否需要能够解决这个问题?

重点是我总是希望我的 EXE 从例如c:\程序\MyApp。如果您单击快捷方式或手动运行它,那就没问题。我发现的唯一异常(exception)是,当您双击与应用程序关联的类型的文件时,Windows 会将 EXE 的工作目录设置为该文件的位置。

这一切背后的问题是我的电脑上有一个开发版本,并且我也像普通用户一样安装发布版本。我需要能够运行开发版本,而无需访问注册表并查找已安装生产版本文件的路径。

最佳答案

即使有办法为注册表中指定的应用程序指定不同的工作目录 - 您确实应该在应用程序中修复此问题。原因是有多种方法可以使用您的应用程序打开数据文件,并且您根本无法修复所有这些方法。考虑一下

D:\> c:\Programs\MyApp\MyApp.exe \\public\foo\data.ext

其中程序以要打开的文件名(作为 UNC 路径)作为参数启动,并在完全不同的目录中执行。我经常做类似的事情,我希望应用程序能够在这些情况下工作。

请注意,启动后首先将工作目录设置为应用程序根路径也不是一个好主意,因为这样相对路径将是错误的。正确的解决方案意味着通过在内部使用完全限定的路径,以一种无论当前工作目录是什么都可以正常工作的方式更改应用程序。

编辑:

您发表评论

But then this means my app is totally dependent on the registry. Which is a pain for development testing, if every time I run my dev build it goes and loads all the files for the installed version

但事实并非如此。您可以使用 GetModuleFileName() 读取当前运行的可执行文件的路径。函数或其在 GUI 库中的等效包装器(如 Delphi 中的 Application.ExeName)。从该路径设置工作目录很容易,我只是认为这不是一个好主意,因为更改工作目录会破坏用户可能期望工作的相对路径。这不是真的

Windows runs the EXE from the location of the file you double-click. This seems to be the exceptional case, in other cases the EXE always runs from where I expect.

因为可以通过多种方式使用与可执行文件本身的路径不同的工作目录来执行应用程序。一个行为良好的程序不会假设它们是相等的。它使得在脚本中或从命令行使用该应用程序变得更加困难。

关于installation - 设置注册表以控制将文件类型与应用程序关联时的工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2686999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com