2012-10-09 81 views
1

我發佈一個Windows項目,並點擊窗體上我安裝另一個安裝程序來安裝。無法獲得應用程序啓動路徑上點擊setup.exe

我沒有在按鈕上獲取clickevent上的當前應用程序啓動路徑。

在調試和發佈它顯示了正確的道路,但它給

Ç發佈後:\ Users \用戶名\ AppData \本地\ 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 \用戶名\ AppData \本地\ APPS \ 2.0路徑

+1

你想要的。應用文件的網絡安裝這一個工程只路徑? – t3hn00b

回答

0

試試這個:

Process.GetCurrentProcess().MainModule.FileName 

BTW,是ClickOnce部署?如果是這樣的話,你所得到的目錄看起來是正確的。

+0

仍然顯示相同的C:\用戶\用戶名\ AppData \ Local \ Apps \ 2.0路徑 –

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 

但我認爲,如果你的應用程序從

+0

任何方式來獲取.exe的當前位置? –

+0

那是因爲.exe在那裏。您可以使用任務管理器進行驗證 - 選擇進程並選擇屬性 - 您將看到exe屬性 - 對於Chrome,它是C:\ Users \ user \ AppData \ Local \ Google \ Chrome \ Application – t3hn00b

+1

@Nacereddine Path.GetDirectoryName(Assembly。 GetExecutingAssembly()。CodeBase)可能是他想要的 – t3hn00b

相關問題