我对Inno Setup FileExists功能有一个令人费解的情况。
这是情况。我有三台具有类似WORKGROUP名称的联网计算机。 1)Windows 7 32位 2)Windows 7 64位 3)Window XP Service Pack 3
1)和3)已被设置为具有读写共享的服务器,例如。 ShareExe和ShareData
有问题的Inno Setup会在ShareExe文件夹中创建可执行文件的快捷方式。它询问用户服务器的ComputerName,然后使用FileExists验证输入是否正确。
在XP(3)机器上运行此设置并指定1)的计算机名称可以正常工作,但是当在Win7 64位PC上运行设置并指定与XP相同的ComputerName时,会导致FileExtsts测试失败。
奇怪的是,我可以转到网上邻居并打开ShareExe文件夹并成功运行可执行文件。我的问题是,“为什么Inno FileExists只能在Win 7 64位机器上出现故障?”我在参考资料中找不到任何与FileExists有任何版本差异的内容。 (我也试过FileSearch,结果相同)。
TIA
答案 0 :(得分:1)
在启用了UAC的Windows 7(和Vista)中,默认情况下,管理员和非管理员上下文之间不共享网络凭据和驱动器映射,即使对于同一用户也是如此。
默认情况下,Inno会提升为管理员权限(通过PrivilegesRequired=admin
),因为大多数安装必须(并且应该)由管理员用户按计算机执行。但是,这意味着在浏览桌面时,资源管理器提示或保存的任何凭据都不可用。
当API直接访问文件时(与FileExists一样),Windows通常会尝试使用与登录PC时相同的用户名/密码静默连接到服务器;如果失败则会报告错误,因为它无法在此时提示备用凭据。因此,如果您可以确保两台PC上的登录详细信息相同,那么它应该可以正常工作。 (通常在连接到域的计算机上免费获得此项,但不是工作组。)
如果那是不可能的,那么你可以尝试的其他东西就是强制通过shell对话框访问 - 如果FileExists失败,那么使用GetOpenFileName
提示用户找到一个特定的文件该文件夹,使用相同的初始路径。我没有对此进行测试,但我认为这会导致Windows显示凭据提示,然后您应该没问题。
(如果这是针对内部应用程序,那么另一种选择是[完全通过安全策略设置]或UAC禁用凭证分离,尽管后者不是一个好主意。当然这不是对于一般发布应用程序是可以忍受的,如果你以其他方式解决它,它会更清晰。)