Windows 7 网络化/共享资源的奇怪Inno设置行为

Windows 7 网络化/共享资源的奇怪Inno设置行为,windows-7,network-programming,64-bit,inno-setup,Windows 7,Network Programming,64 Bit,Inno Setup,我对Inno Setup FileExists函数的情况感到困惑 情况是这样的。我有三台联网计算机,它们的工作组名称相似。 1) Windows 7 32位 2) Windows 7 64位 3) WindowsXP服务包3 1) 和3)已设置为具有读写共享(例如ShareExe和ShareData)的服务器 有问题的Inno安装程序会在ShareExe文件夹中创建可执行文件的快捷方式。它要求用户输入服务器的计算机名,然后使用FileExists验证输入是否正确 在XP(3)计算机上运行此设置并

我对Inno Setup FileExists函数的情况感到困惑

情况是这样的。我有三台联网计算机,它们的工作组名称相似。 1) Windows 7 32位 2) Windows 7 64位 3) WindowsXP服务包3

1) 和3)已设置为具有读写共享(例如ShareExe和ShareData)的服务器

有问题的Inno安装程序会在ShareExe文件夹中创建可执行文件的快捷方式。它要求用户输入服务器的计算机名,然后使用FileExists验证输入是否正确

在XP(3)计算机上运行此设置并指定1)的computername可以正常工作,但是在Win7 64位PC上运行此设置并指定与XP相同的computername时,会导致FileExtsts测试失败

奇怪的是,我可以在网络上打开ShareExe文件夹并成功运行可执行文件。我的问题是,“为什么Inno FileExists仅在Win 7 64位计算机上失败?”我在参考资料中找不到任何与FileExists存在版本差异的信息。(我还尝试了FileSearch,得到了相同的结果)

TIA

在启用UAC的Windows 7(和Vista)中,默认情况下,管理员和非管理员上下文之间不会共享网络凭据和驱动器映射,即使对于同一用户也是如此

默认情况下,Inno提升为管理员权限(通过
PrivilegesRequired=admin
),因为大多数安装必须(并且应该)由管理员用户在每台机器上执行。但是,这意味着浏览器在浏览桌面时提示或保存的任何凭据都不可用

当API直接访问文件时(如FileExists),Windows通常会尝试使用与登录PC时相同的用户名/密码以静默方式连接到服务器;如果失败,那么它只会报告一个错误,因为此时无法提示输入备用凭据。因此,如果您可以确保两台电脑上的登录详细信息相同,那么它应该可以工作。(您通常在连接到域的计算机上免费获得此服务,但不是在工作组上。)

如果这不可能,那么您可以尝试通过shell对话框强制访问——如果文件存在失败,则使用
GetOpenFileName
提示用户使用相同的初始路径在该文件夹中查找特定文件。我还没有对此进行测试,但我认为这应该会导致Windows显示一个凭据提示,然后您就可以了


(如果这是针对内部应用程序的,那么另一个选项是[通过安全策略设置]或UAC完全禁用凭据分离,尽管后者不是一个好主意。当然,对于一般版本的应用程序来说,这是不可容忍的,而且如果你用其他方法解决它,它会更干净。)

感谢您的周到回答。由于此应用程序是为通用性而开发的,而且用户都是非专业人士,所以我希望您的GetOpenFileName建议将是一个很好的解决方案。不幸的是,“浏览文件夹”对话框不接受默认的文件夹参数(\\{computername}\…),因此用户必须找到共享根文件夹并导航到可执行文件,我认为这会让大多数目标用户感到困惑。有没有办法只验证服务器的计算机名?(系统将提示用户输入)。您需要使用文件浏览器,而不是文件夹浏览器。关于特定路径,我假设,由于您只是提示输入计算机名,那么您已经知道至少一个感兴趣文件的共享名和路径。如果不是这样的话,那么还有其他方法来验证计算机名,但是你真的应该选择一些类似于你的应用程序将如何使用它的方法——例如,如果你的应用程序作为数据库服务器连接到它,那么也要这样做来验证它。如果你的应用程序打开了一个特定端口的套接字,那么也要这样做。等