0

I have a puzzling situation with the Inno Setup FileExists function.

Here's the situation. I have three networked computers with like WORKGROUP names. 1) Windows 7 32-bit 2) Windows 7 64-bit 3) Window XP Service Pack 3

1) and 3) have been setup as servers with read-write shares, ex. ShareExe and ShareData

The problematic Inno Setup creates shortcuts to the executable in the ShareExe folder. It asks the user for the ComputerName of the server and then uses FileExists to verify correct input.

Running this setup on the XP (3) machine and specifying 1)'s computername works just fine, however when running the setup on the Win7 64-bit PC and specifying the same ComputerName as with XP, causes the FileExtsts test to fail.

Strangely, I can go to Network Places and open the ShareExe folder and successfully run the executable. My question is, "why does Inno FileExists fail only on the Win 7 64-bit machine?" I cannot find anything in the reference materials that suggest any version differences with FileExists. (I also tried FileSearch with the same results).

TIA

4

1 回答 1

1

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

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

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

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

(如果这是针对内部应用程序,那么另一种选择是完全禁用凭据分离 [通过安全策略设置] 或 UAC,尽管后者并不是一个好主意。当然这对于一个通用发布应用程序,如果您以其他方式之一解决它,它会更干净。)

于 2012-08-17T10:49:38.400 回答