0

Windows 7のバッチファイルの代わりに実行可能ファイル(Borland C ++ Builder 6を使用)を作成する必要がありました。これは、アクセス許可によって通常のユーザー(管理者以外)が必要なバッチを実行できないためです。いくつかの異なるWindows7マシン、いくつかの64ビットといくつかの32などがあります。私が直面している問題は、「プログラムファイル」ディレクトリがプログラムにハードコードされていることですが、常に正しいとは限りません。プログラムファイルディレクトリ。これにより、一部のマシンでエラーが発生します。

レジストリからプログラムファイルのディレクトリを取得する方法はよく知っていますが、アクセス許可の設定でプログラムがレジストリにアクセスできないため、これがすべてのマシンで機能するとは限りません。私はGetWindowsDirectoryのような関数を高低で検索してきましたが、役に立ちませんでした。誰か提案はありますか?

編集:私はこれをWindows XPマシンでWin7に配置するようにプログラムしました(XP / 7のものを変更または回避する方法はありません、それはくだらないかもしれません)。これは、インストールを必要としないシンプルなユーティリティです。ファイルに配置されるだけです。いくつかのタスクを実行するには、外に出てプログラムファイルディレクトリを見つける必要があります。

4

5 に答える 5

1

これはまず第一に展開の問題です。プログラムをc:\program files (x86)64ビットマシンにコピー/インストールする必要があります。コードでc:\ programファイルを使用するだけで、Windowsはそれを(x86)ディレクトリにリダイレクトします。

それ以外の場合、UACをバイパスしようとする簡単な解決策はありません。管理者権限を要求するには、実行可能ファイルにマニフェストを埋め込む必要があります。ユーザーはUACプロンプトを受け取り、プライベートパーツをハッキングすることを通知します。このような古いツールを使用してこれを行う方法は私にはわかりません。おそらく、.rcファイルに埋め込む必要があります。または、.manifestファイルを使用します。

于 2011-03-28T15:47:47.290 に答える
0

ソフトウェアをインストールしたら、次の場所に移動します。

C:\Program Files\Borland\CBuilder6\Bin

bcb.exeファイルを右クリックして選択

プロパティ -> 互換性

オプションを選択しRun this program mode Windows XP(Service Pack 3)Privilege Level

次に、オプションを選択し、Run as administrator[適用] をクリックします。

これは私の問題でうまくいきます。

于 2012-03-10T00:09:42.960 に答える
0

とともに使用SHGetFolderPathCSIDL_PROGRAM_FILESます。

SHGetKnownFolderPath常に Windows Vista 以降を使用している場合は、より新しいバージョンが呼び出されますが、プラットフォーム SDK を更新する必要がある場合があります。Borland C++ 6 をまだ使用している場合は、プラットフォーム SDK が古い可能性があります。その場合、使用できるはずですSHGetFolderPath

于 2011-03-28T17:39:35.347 に答える
-2

Windows 7 x64 では、インストールが "c:\Program Files(x86)" にある実際のフォルダーを指す "c:\Program Files" にジャンクション ポイントを作成するだけです。これは、ソフトウェアをインストールするユーザーが行う必要があります。これは、問題を処理するだけでなく、Win 7 x64 で動作しないサード パーティ製パッケージも処理する必要があります。

接合点が何かわからない場合は、mklink のヘルプを読んでください。

于 2011-03-28T16:44:41.187 に答える