0

Inno Setup FileExists 関数で不可解な状況に陥っています。

これが状況です。同様の WORKGROUP 名を持つ 3 台のネットワーク コンピュータがあります。1) Windows 7 32 ビット 2) Windows 7 64 ビット 3) Windows XP Service Pack 3

1) と 3) は、読み取り/書き込み共有を持つサーバーとしてセットアップされています。ShareExe と ShareData

問題のある Inno Setup は、ShareExe フォルダーに実行可能ファイルへのショートカットを作成します。ユーザーにサーバーの ComputerName を要求し、FileExists を使用して正しい入力を確認します。

XP (3) マシンでこのセットアップを実行し、1) のコンピューター名を指定すると問題なく動作しますが、Win7 64 ビット PC でセットアップを実行し、XP と同じコンピューター名を指定すると、FileExtsts テストが失敗します。

不思議なことに、ネットワーク プレースに移動して ShareExe フォルダを開き、実行可能ファイルを正常に実行できます。私の質問は、「Win 7 64 ビット マシンでのみ Inno FileExists が失敗するのはなぜですか?」ということです。FileExists とのバージョンの違いを示唆する参考資料は見つかりません。(同じ結果で FileSearch も試しました)。

ティア

4

1 に答える 1

1

UAC が有効になっている Windows 7 (および Vista) では、デフォルトでネットワーク資格情報とドライブ マッピングは、同じユーザーであっても、管理コンテキストと非管理コンテキストの間で共有されません。

PrivilegesRequired=adminデフォルトでは、ほとんどのインストールは管理者ユーザーがマシンごとに実行する必要がある (および実行する必要がある) ため、Inno は (経由で) 管理者権限に昇格します。ただし、これは、デスクトップを参照するときに Explorer によって求められた、または保存された資格情報が利用できないことを意味します。

ファイルが API によって (FileExists のように) 直接アクセスされる場合、Windows は通常、PC へのログインに使用されたのと同じユーザー名/パスワードを使用して、サーバーにサイレントに接続しようとします。これが失敗した場合、その時点で別の資格情報を要求する方法がないため、エラーが報告されるだけです。そのため、両方の PC でログインの詳細が同じであることを確認できれば、機能するはずです。(通常、ワークグループではなく、ドメインに接続されているコンピューターでは無料で入手できます。)

それが不可能な場合は、シェル ダイアログを介してアクセスを強制することもできます。FileExists が失敗した場合はGetOpenFileName、同じ初期パスを使用して、そのフォルダー内の特定のファイルを見つけるようにユーザーに促すために使用します。 . 私はこれをテストしていませんが、これにより Windows に資格情報のプロンプトが表示され、その後は問題ないと思います。

(これが内部アプリ用である場合、別のオプションは、(セキュリティ ポリシー設定を介して) 資格情報の分離を無効にするか、UAC を完全に無効にすることですが、後者は実際には良い考えではありません。もちろん、これは、一般リリースのアプリであり、とにかく他の方法のいずれかで解決した方がクリーンです.)

于 2012-08-17T10:49:38.400 に答える