0

基本的に、2番目のプログラムからデータをエクスポートし、3番目のプログラムに関するデータファイルにインポートするVB6ソフトウェアを維持する必要があります。したがって、このインポート/エクスポート ツールは、Windows 95 から XP までの数年間、非常にうまく機能していましたが、今は、Vista と Seven をサポートするように更新する必要があります...そして、3 番目のプログラムのファイルに書き込むときに失敗します。現時点では、Windows 7 でテストを行ったところですが、Vista でも同じになると思います。

問題の詳細は次のとおりです。

私のプログラムが書き込みのために 3 番目のプログラムのデータに到達しようとすると、次のエラーが表示されます:「実行時エラー '75': パス/ファイル アクセス エラー」。私のプログラムは、彼が所有していないデータ ファイルについて書き込むためのアクセス権を取得しようとするため、UAC のブロックのように聞こえます。次に、管理者権限または XP 互換性を使用してプログラムを実行すると、エラーは発生せず、3 番目のプログラムのデータ ファイルは適切に変更されます。

現時点では、プログラムでこのエラーを回避する方法を考えています(主な仕事についてブロックされているため、プログラムにとって致命的です:データのエクスポート/インポート):インストール時(Inno Setupを使用しています)または実行時。

正しい方法は何ですか?プログラムで「XP互換性」を強制するか、プログラムを昇格させて管理者権限で起動しますか? これを達成する方法と時期 (インストール時または実行時) は? マニフェストはこのフィールドで何かを変更できますか (現時点ではマニフェストを使用したことはありません) ?

また、方法が何であれ (XP 互換性または管理者権限)、UAC は起動するたびにシステム変更についてユーザーに警告します: 非常に迷惑です :(

では、Windows 7 や Vista でも XP と同じようにプログラムをスムーズに実行するにはどうすればよいでしょうか。

あなたの明るい返事を待っています...

PS:また(重要かもしれません)、私のプログラムはデータファイルのパス自体を認識していませんが、共通ダイアログを使用して選択するのはユーザーです。


OK、私はいくつかのニュースで戻ってきました。VB6 のマニフェスト クリエーター (Matt が返信で示したもの) を使用して level="requireAdministrator" を実行するだけのマニフェストを埋め込みました。

管理者としてログに記録されているプログラムを (Windows 7 で) インストールすると、問題なくインストールされ、問題なくプログラムが起動され、その仕事 (自分のプログラムが所有していないファイルの読み取りと書き込み) を実行します。質問。だから、この場合は完璧です!

それにもかかわらず、単純なユーザーとしてログインしている場合、管理者パスワードで許可を求めた後、問題なくインストールされ、問題なくプログラムが起動されますが、(これが残りの問題です)「パス/ファイルアクセスエラー」に再び陥ります(エラー '75') (私のプログラムが所有していない) 外部ファイルを読み書きするとき。

それで、これは私の追加の質問です:単純なユーザーとしてログに記録されているこのエラーを解決するにはどうすればよいですか? この特定のケースのみで、昇格が機能しなかったことを意味しますか (インストール、起動、読み取り/書き込みなどの他のケースでは機能するようです)。ここでちょっと頭が混乱してきました…

編集:まあ、私は物事を理解したと思いますが、あなたの確認が必要です(またはそうではありません). プログラム B を呼び出します。B は、プログラム A が所有するデータを読み取り/インポートし、プログラム C が所有するデータに書き込み/エクスポートします。

私の混乱は、単純なユーザーとしてログインしているBを再インストールしましたが、まだインストールされていて管理者としてログインしているプログラムAとCではありませんでした。したがって、B が A に関するデータを読み取るときが来ると、昇格にもかかわらず、これらの A のデータは管理者が所有しているため失敗します (これらの A のデータがユーザー固有のパスになくても、「C:\email_data」と表示されます) 」)。

単純なユーザーとしてログに記録されている 3 つのプログラムをすべて再インストールすると、機能します (警告もエラーも発生しません)。

だから、私は私の質問を再定式化します:昇格が機能するため (プログラムが管理者権限を取得できるようにする必要があります)、なぜプログラム B (ユーザーによってインストールされた) はプログラム A (管理者によってインストールされた) に関するデータを読み取れないのですか? プログラムを管理者のみとしてインストールするには、Inno Setup プロセス中に何かを追加する必要があります (A および C プログラムのインストール方法に影響を与えないことを知っています) ?

4

2 に答える 2

0

UACが有効になっている場合、ディレクトリはWindows 7で保護されます(%Program Files%ディレクトリに直接書き込むには、昇格された特権が必要です)

これはあなたが直面している問題です。

「レガシー」プログラムがよりシームレスに(つまり、目に見えるエラーなしで)機能するために、Windows7はフォルダーリダイレクトを使用します。これにより、レガシーアプリケーションはプログラムファイルディレクトリにあるもののコピーを読み書きできます。

マニフェストを使用する場合、これはアプリケーションがUACに対応していることをウィンドウに通知するため、フォルダーのリダイレクトは行われませんが、プログラムファイルの読み取り/書き込みを行うには、昇格された(管理者)特権が必要です。

マニフェストの使用方法の例はたくさんあります。私の個人的な好みはマニフェストクリエーターです。

に設定するrequestedExecutionLevel"requireAdministrator"、実際のフォルダーの読み取りと書き込みが行われますが、アプリの実行時にUACの昇格の入力を求められます。

解決策は、実際には、プログラムファイルの場所を読み書きするのではなく、別の場所を使用することです。これに関する解決策については、このスタックオーバーフローの質問をご覧ください。

于 2012-06-25T16:39:32.267 に答える