0

私は C# が初めてで、基本的にゲームの個人ファイルを更新する単純な Windows フォーム アプリケーションを作成しました。

毎回バージョンを変更するために、特定のフォルダーを手動で移動および削除する必要があります。私はこれを成功させました。

ただし、それを提供する前に、本当に改善する必要があります。プロセスの名前を変更し、説明 ETC を削除する必要があることはわかっています。

エラーに出くわしました。推測する代わりに、これを行う方法について経験豊富な人から意見を得るのが最善だと思います。

Inno Setup を使用して、アプリケーションのインストーラーを作成します。これにより、プログラム ファイルが 32 ビットおよび 64 ビットになることを確認できます。だから私はこれがプログラムファイルにあることを知っています。

だから今、私はこれを正しい方法で行ったかどうか疑問に思っていますか? 私はこの形式を使用してプログラムファイルを見つけていました:

string programFilesFolder = Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

ただし、これはすべての Windows システム (XP、Vista、Win7、Win8) で機能し、完全に正確ですか? 上記を使用してから、これを使用するつもりでした:

        string PATCHSELECTOR = Path.Combine(programFiles, @"PATCH SELECTOR");
        if (Directory.Exists(PATCHSELECTOR))
        {
            string GamereliteFolder = Path.Combine(programFiles, @"GAMERELITE~1");
            if (Directory.Exists(GamereliteFolder))

次に、string メソッドを使用してファイルを移動します。ファイルが存在する場合は、ファイルを PATCH SELECTOR から GAMERELITE にコピーする前に削除します。

また、Windows XP は、プログラムを管理者として実行する必要があるアセンブリ リソースが埋め込まれた .exe の使用をサポートしますか? 以前はUACを介してアセンブリを機能させていましたが、UACがオフになっている場合やXPの場合は常に機能するとは限らないため、代わりに管理アセンブリを試してみることにしました。

誰かが私に洞察、アイデア、またはリンクを教えてもらえますか?

4

3 に答える 3

0

いくつかのこと:

  • 既に述べた回答の中で、Assembly.GetExecutingAssembly().Location は、現在「実行中」のアセンブリの完全なファイル パスも提供します。(または、GetCurrentAssembly)

  • 私があなたの質問を正しく読んでいれば、あなたは自分の場所と別のアプリケーションの両方を見つけようとしています。他のアプリケーションに正確な場所を指定するレジストリ キーがあるかどうかを確認することを強くお勧めします。これにより、コピー手順がより安定します。

于 2012-10-02T04:38:04.827 に答える
0

実行可能ファイルの場合 (Web サイトと Web アプリケーションについては不明)、これは実行可能ファイルが存在するディレクトリを返します (実際には、フレームワークがアセンブリをロードするためにプローブするベース パスであり、99% は同じことです)。

System.AppDomain.CurrentDomain.BaseDirectory
于 2012-10-01T07:07:33.230 に答える
0

この方法は、Windows PATH 変数で定義されているフォルダーにある実行可能ファイルに対して機能します。

private string LocateEXE(String fileName)
{
    string path = Environment.GetEnvironmentVariable("path");
    string[] folders = path.Split(';');

    foreach (var folder in folders)
    {
        if (File.Exists(Path.Combine(folder, fileName))) 
        {
            return Path.Combine(folder, fileName);
        }
    }

    return String.Empty;
}

使用法:

string pathToEXE = LocateEXE("Example.exe");

参照:

于 2012-10-01T06:31:56.627 に答える