1

我正在发布一个 Windows 项目,然后单击表单我正在安装另一个要安装的设置。

我没有在按钮上的 clickevent 上获得当前的应用程序启动路径。

在调试和发布时,它显示了正确的路径,但发布后它给出了

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 应用程序安装在安装它们的用户的配置文件下。

编辑 :

方法一:

这是一种获取应用程序安装路径的方法(仅当您的应用程序已安装时才有效)(其中部分由@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)));

方法二:

你也可以试试

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri

但我认为这个只有当你的应用程序是从互联网上安装时才有效

于 2012-10-09T08:33:34.313 回答
0

尝试这个:

Process.GetCurrentProcess().MainModule.FileName

顺便说一句,它是 ClickOnce 部署吗?如果是这样,那么您得到的目录看起来是正确的。

于 2012-10-09T08:30:25.773 回答