5

初めまして、ここで何度も検索してくれたことに感謝します。

プレイするゲーム用のカスタム HUD を作成し、同じゲーム用の別の HUD に触発されて、C# でインストーラーに取り組んでいます。すべてのスクリプト ファイルをダウンロードして、既存のディレクトリに上書きします。

C:\Program Files (x86)\Steam\steamapps\me\team fortress 2\tf

[残念ながら、Valve がインストールしたファイルを変更しているため、使用するフォルダーを制御することはできません]

フォルダーの削除、フォルダーの追加、またはファイルのコピーを行うには、アプリ マニフェストを使用して、exe を起動するたびにユーザーのアクセス許可を増やす必要がありました。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

どういうわけか、私が触発されたインストーラーは、UAC プロンプトを強制することなく、私と同じフォルダーにインストールされます。

彼のアプリにはセキュリティ警告しか表示されませんが、「常にチェックする」チェックボックスをオフにすると、特別な権限を確認しなくても何度でも実行できます。

http://www.trishtech.com/img_art_a/win7_publisher_not_verified_0.jpg>">

アプリを彼のようにシームレスにする方法について何か提案はありますか? 別のアプリの作成者に連絡したところ、彼は C# も使用しているとのことですが、これを機能させるために彼が行っている特別なことは何も知りません。

編集:何らかの形で違いが生じる場合に備えて、私たちが別の方法で行っていることを知っているいくつかのこと:

  • ファイル ブラウザーを使用してファイルの配置場所を決定しているので、どこからでもアプリを実行できます。
    • 彼はそれらをexeと同じディレクトリに出力しているだけで、exeを宛先フォルダーに配置する必要があります。
  • ILMerge を使用して SharpZipLib をアプリにバンドルしています。
    • 彼は、exe の隣の zip ファイルに dll を残しています。
4

3 に答える 3

3

「C:\ ProgramFiles(x86)」に書き込もうとしている場合は、管理者権限が必要です。したがって、他のアプリはそこでファイルを作成するのではなく、UACによって保護されていないディレクトリに作成する必要があります。

ファイルがユーザーごとの場合は、appdataフォルダーにサブフォルダーを作成し、そこにファイルを保存できます。

慣例では、会社を識別するためのフォルダーと、製品を識別するためのフォルダーを作成します。

例えば

var dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
          +    "\\MyCompanyName\\MyApplicationName";
于 2012-09-04T20:38:38.747 に答える
2

彼はそれらをexeと同じディレクトリに出力しているだけで、exeを宛先フォルダーに配置する必要があります。

そうはならないと思います。同じexeディレクトリに違いはありません。権限があるかどうかに関係ありません。

「通常の」応答は、権限のあるディレクトリに書き込むことです。しかし、これは常に可能であるとは限りません。

アプリケーションをサービスとして実行した場合、Windows では一度だけポップアップすると思いますが、これはユースケースには適していないようです。

そのようなメッセージを抑制する適切な方法はないと思います。それはキャッチ 22 状況のようなものです。できないことを行うには、許可を得る必要があります (そのため、ユーザーを昇格させます -> UAC ポップアップ)。

于 2012-09-04T20:57:53.083 に答える
0

私はsgmooreの答えを正しいものとしてマークしていますが、私自身のケースは少し奇妙に思えたので、それも文書化したい.

私は自分のプログラムを基本に落とし込み、多くの実験を行いました。何らかの理由で、彼と私は実際にファイルをコピーしてそのディレクトリにフォルダーを作成できることがわかりました。おそらく、それはsteamappsフォルダーに関する何か特別なものであるか、または「実際の」プログラムでは通常は機能しない場合に、この限られたケースで実際に機能するバグにすぎない可能性があります.

実際に UAC プロンプトが必要だったのは、奇妙なことに、私のプロジェクトが最初に生成した \Bin\Debug\ フォルダーから exe を実行していたことです。exeを別の場所に移動して実行すると、正常に動作します。\Bin\Debug\ フォルダーから彼の exe を実行しても、彼も機能しません。それがなぜなのか、私には理解できませんでした。

他に気づいたことは、アプリが例外なく成功する場合、起動時にセキュリティ警告が表示されないことです。静かに開いてから動作します。セキュリティ警告が表示されるたびに、失敗します。

プロトコルはこれら 2 つの問題を新しい問題に変えることになると思いますが、この時点ではおそらくエッジケース/ハックの領域に入っているように思われます。

プログラムを元に戻して、これらの奇妙な状況下でも完全な機能を使用できるかどうか、または UAC 昇格を再度有効にする必要があるかどうかを確認します。

于 2012-09-05T18:39:02.203 に答える