Deployment Inno安装程序:自动启动应用程序时注册表设置未更新

Deployment Inno安装程序:自动启动应用程序时注册表设置未更新,deployment,installation,inno-setup,Deployment,Installation,Inno Setup,我正在使用Inno安装程序构建应用程序安装程序 在安装过程中,我添加了一个注册表项,它提供了一个路径,我将在其中存储多个不同应用程序(或同一应用程序的多个版本!)可能使用的公共文件(DLL等) 我正在使用本文中建议的方法: 我遇到的问题是,安装完成后,用户可以自动运行应用程序。在此实例中,应用程序无法在路径位置找到DLL。如果我关闭应用程序并从资源管理器重新启动它,它就可以正常工作 我不想把文件放在标准的共享dll位置,它们并不都是dll,我想更好地控制我的应用程序使用的dll版本。此外,将文件

我正在使用Inno安装程序构建应用程序安装程序

在安装过程中,我添加了一个注册表项,它提供了一个路径,我将在其中存储多个不同应用程序(或同一应用程序的多个版本!)可能使用的公共文件(DLL等)

我正在使用本文中建议的方法:

我遇到的问题是,安装完成后,用户可以自动运行应用程序。在此实例中,应用程序无法在路径位置找到DLL。如果我关闭应用程序并从资源管理器重新启动它,它就可以正常工作

我不想把文件放在标准的共享dll位置,它们并不都是dll,我想更好地控制我的应用程序使用的dll版本。此外,将文件放入application installation.exe目录也不是一个选项。我也不想将路径添加到系统环境路径中(即使添加了,我也怀疑我可能会遇到同样的问题!)


有什么想法吗?

一些背景知识和我的“当前”解决方案。我想补充的关键是:

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\..\App Paths\{#ExeName}.exe"; ValueType: string; ValueData: "{app}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Microsoft\..\App Paths\{#ExeName}.exe"; ValueType: string; ValueName: "Path"; ValueData: "{#CommonPath}"; Flags: uninsdeletekey
在我的[跑步]部分,我有:

Filename: {app}\{#ExeName}.exe; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent 
我将标志更改为:

postinstall shellexec skipifsilent
根据使用shellexec命令:

该文件将被打开…与用户在资源管理器中双击该文件的方式相同


按照上面Martin的回答,我相信它是有效的,因为shellexec产生了一个新的进程,它可以接收环境的变化,而不是像我作为安装程序进程的子进程启动应用程序一样。

我想这是RTFM的一个例子!!我在[run]部分使用了shellexec命令,它似乎解决了这个问题。这个协议是什么?删除问题?我想它可能对像我这样的傻瓜有用。至少我认为有关特定于应用程序的路径的提示实际上非常有用,并且没有被广泛引用。我发布了错误的链接:“shellexec”标志运行程序的方式与“用户在资源管理器中双击文件的方式相同”。换句话说,它启动一个新进程,而不是安装程序进程的子进程,所以它关注环境的变化,我猜这与你在答案中所说的相符。我仔细检查了一下。run命令看起来像
[run]文件名:{app}\{#ExeName}.exe;描述:{cm:LaunchProgram,{#AppName}};标志:nowait postinstall skipifsilent
我将标志更改为
postinstall shellexec skipifsilent
,并且它确实正常运行(在注册表中提供的路径中查找DLL),因此请将其作为示例的答案发布。我在windows 10上,如果有任何不同,请使用inno setup 5.5.5。我想现在我只能说谢谢你的警告了。在上线之前,我会找几个人来测试。希望我不会后悔!