1

私は Windows プロジェクトを公開しており、フォームをクリックすると、インストールする別のセットアップをインストールしています。

ボタンのクリックイベントで現在のアプリケーションの起動パスを取得できません。

デバッグとリリースでは正しいパスが表示されますが、公開後は表示されます

C:\Users\username\AppData\Local\Apps\2.0 パス

すでに使用しています:

Application.StartupPath
Application.Executablepath
Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location))
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase))
Path.Combine(Directory.GetCurrentDirectory())

しかし、それは常に表示されます

C:\Users\username\AppData\Local\Apps\2.0 パス

4

2 に答える 2

3

ClickOnce で使用されるパスであるため、そのパスを取得しています。ClickOnce アプリケーションは、それらをインストールしたユーザーのプロファイルの下にインストールされます。

編集 :

方法 1:

アプリケーションがインストールされたパスを取得する方法は次のとおりです (アプリケーションがインストールされている場合にのみ機能します) (この部分は@codeConcussionによって記述されています)。

// productName is name you assigned to your app in the 
// Project properties -> Publish -> Publish Settings
public static string GetInstalledFromDir(string productName)
{
    using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall"))
    {
        if (key != null)
        {
            var appKey = key.GetSubKeyNames().FirstOrDefault(x => GetValue(key, x, "DisplayName") == productName);
            return appKey == null ? null : GetValue(key, appKey, "UrlUpdateInfo");
        }
    }

    return null;
}

private static string GetValue(RegistryKey key, string app, string value)
{
    using (var subKey = key.OpenSubKey(app))
    {
        if (subKey == null || !subKey.GetValueNames().Contains(value)) 
        { 
            return null; 
        }

        return subKey.GetValue(value).ToString();
    }
}

使用方法は次のとおりです。

Uri uri = new Uri(GetInstalledFromDir("ProductName"));
MessageBox.Show(Path.GetDirectoryName(HttpUtility.UrlDecode(uri.AbsolutePath)));

方法 2 :

あなたも試すことができます

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri

しかし、これはアプリがインターネットからインストールされた場合にのみ機能すると思います

于 2012-10-09T08:33:34.313 に答える
0

これを試して:

Process.GetCurrentProcess().MainModule.FileName

ところで、それはClickOnceデプロイメントですか?もしそうなら、あなたが取得しているディレクトリはほぼ正しく見えます。

于 2012-10-09T08:30:25.773 に答える