å¦ä½å¨æ§å¶å°åºç¨ç¨åºä¸æ¾å°åºç¨ç¨åºçè·¯å¾ï¼
å¨Windows Formsä¸ ï¼æå¯ä»¥ä½¿ç¨
Application.StartupPath
æ¥æ¾å½åè·¯å¾ï¼ä½è¿ä¼¼ä¹å¨æ§å¶å°åºç¨ç¨åºä¸ä¸å¯ç¨ã
#1楼
ä¸é¢ççæ¡æ¯æéè¦ç90ï¼ ï¼ä½æ¯ä¸ºæè¿åäºUriè䏿¯å¸¸è§è·¯å¾ã
å¦MSDN论åå¸åä¸æè¿°ï¼ å¦ä½å°URIè·¯å¾è½¬æ¢ä¸ºæ®éæä»¶è·¯å¾ï¼ ï¼æä½¿ç¨äºä»¥ä¸å 容ï¼
// Get normal filepath of this assembly's permanent directory
var path = new Uri(
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
).LocalPath;
#2楼
æ¨å¯ä»¥ä½¿ç¨è§£å³æ¹æ¡èµæºç®¡çå¨å¨é¡¹ç®ä¸å°æä»¶å¤¹åç§°åå»ºä¸ºèµæºï¼ç¶åå°æä»¶ç²è´´å°èµæºä¸ã
private void Form1_Load(object sender, EventArgs e) {
string appName = Environment.CurrentDirectory;
int l = appName.Length;
int h = appName.LastIndexOf("bin");
string ll = appName.Remove(h);
string g = ll + "Resources\\sample.txt";
System.Diagnostics.Process.Start(g);
}
#3楼
æ¨å¯ä»¥æ¹ç¨è¿ä¸ªã
System.Environment.CurrentDirectory
#4楼
妿åºè¯¥éè¿å廿¥è°ç¨è¯¥exeæä»¶ï¼åå¯ä»¥ä½¿ç¨å®
var thisPath = System.IO.Directory.GetCurrentDirectory();
#5楼
æç¨è¿
System.AppDomain.CurrentDomain.BaseDirectory
å½ææ³æ¾å°ç¸å¯¹äºåºç¨ç¨åºæä»¶å¤¹çè·¯å¾æ¶ã è¿éç¨äºASP.NetåWinformåºç¨ç¨åºã å®è¿ä¸éè¦å¯¹System.Webç¨åºéçä»»ä½å¼ç¨ã
#6楼
å¯¹äºæ§å¶å°åºç¨ç¨åºï¼æ¨å¯ä»¥å°è¯ä»¥ä¸æä½ï¼
System.IO.Directory.GetCurrentDirectory();
è¾åºï¼å¨æçæ¬å°è®¡ç®æºä¸ï¼ï¼
cï¼\\ users \\ xxxxxxx \\ documents \\ visual studio 2012 \\ Projects \\ ImageHandler \\ GetDir \\ bin \\ Debug
æè æ¨å¯ä»¥å°è¯ï¼æåè¿æä¸ä¸ªåææ ï¼ï¼
AppDomain.CurrentDomain.BaseDirectory
è¾åºï¼
cï¼\\ users \\ xxxxxxx \\ documents \\ visual studio 2012 \\ Projects \\ ImageHandler \\ GetDir \\ bin \\ Debug \\
#7楼
AppDomain.CurrentDomain.BaseDirectory
å°è§£å³è¯¥é®é¢ï¼ä»¥ä½¿ç¨å®è£ å å¼ç¨ç¬¬ä¸æ¹åèæä»¶ã
#8楼
æçæææ¯ï¼ä¸ºä»ä¹ä¸ä½¿ç¨ap / invokeæ¹æ³ï¼
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
public class AppInfo
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]
private static extern int GetModuleFileName(HandleRef hModule, StringBuilder buffer, int length);
private static HandleRef NullHandleRef = new HandleRef(null, IntPtr.Zero);
public static string StartupPath
{
get
{
StringBuilder stringBuilder = new StringBuilder(260);
GetModuleFileName(NullHandleRef, stringBuilder, stringBuilder.Capacity);
return Path.GetDirectoryName(stringBuilder.ToString());
}
}
}
æ¨å¯ä»¥åApplication.StartupPath䏿 ·ä½¿ç¨å®ï¼
Console.WriteLine("The path to this executable is: " + AppInfo.StartupPath + "\\" + System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe");
#9楼
å¨VB.net
My.Application.Info.DirectoryPath
为æå·¥ä½ï¼åºç¨ç¨åºç±»åï¼ç±»åºï¼ã ä¸ç¡®å®Cï¼...å°ä¸å¸¦æä»¶åçè·¯å¾ä½ä¸ºå符串è¿å
#10楼
è¿æ¯å¯ä¸32ä½å64ä½åºç¨ç¨åºä¸èµ·ä½¿ç¨çå¯é è§£å³æ¹æ¡ã
æ·»å 以ä¸åèï¼
使ç¨System.Diagnostics;
使ç¨System.Management;
å°æ¤æ¹æ³æ·»å å°æ¨ç项ç®ä¸ï¼
public static string GetProcessPath(int processId)
{
string MethodResult = "";
try
{
string Query = "SELECT ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId;
using (ManagementObjectSearcher mos = new ManagementObjectSearcher(Query))
{
using (ManagementObjectCollection moc = mos.Get())
{
string ExecutablePath = (from mo in moc.Cast<ManagementObject>() select mo["ExecutablePath"]).First().ToString();
MethodResult = ExecutablePath;
}
}
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
ç°å¨åè¿æ ·ä½¿ç¨å®ï¼
int RootProcessId = Process.GetCurrentProcess().Id;
GetProcessPath(RootProcessId);
请注æï¼å¦ææ¨ç¥éè¿ç¨çIDï¼åæ¤æ¹æ³å°è¿åç¸åºçExecutePathã
å¦å¤ï¼å¯¹äºé£äºæå ´è¶£ç人ï¼
Process.GetProcesses()
...å°ä¸ºæ¨æä¾ææå½åæ£å¨è¿è¡çè¿ç¨çæ°ç»ï¼å¹¶ä¸...
Process.GetCurrentProcess()
...å°ä¸ºæ¨æä¾å½åçæµç¨ä»¥åå®ä»¬çä¿¡æ¯ï¼ä¾å¦IDçï¼ä»¥åæéçæ§å¶æï¼ä¾å¦Killçï¼*
#11楼
æ¨å¯ä»¥ç®åå°å°
System.Windows.Forms
å¼ç¨æ·»å å°é¡¹ç®ä¸ï¼ç¶åç §å¸¸ä½¿ç¨
System.Windows.Forms.Application.StartupPath
ã
å æ¤ï¼ä¸éè¦æ´å¤æçæ¹æ³æä½¿ç¨åå°ã
#12楼
æå·²ä½¿ç¨æ¤ä»£ç å¹¶è·å¾äºè§£å³æ¹æ¡ã
AppDomain.CurrentDomain.BaseDirectory
#13楼
å¨ç¹æ®æ åµä¸ï¼ä¾å¦ä½¿ç¨æåexeç符å·é¾æ¥ï¼ï¼è¿äºæ¹æ³é½ä¸èµ·ä½ç¨ï¼å®ä»¬å°è¿å龿¥çä½ç½®è䏿¯å®é exeã
å æ¤å¯ä»¥ä½¿ç¨QueryFullProcessImageNameæ¥è§£å³æ¤é®é¢ï¼
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Diagnostics;
internal static class NativeMethods
{
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool QueryFullProcessImageName([In]IntPtr hProcess, [In]int dwFlags, [Out]StringBuilder lpExeName, ref int lpdwSize);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern IntPtr OpenProcess(
UInt32 dwDesiredAccess,
[MarshalAs(UnmanagedType.Bool)]
Boolean bInheritHandle,
Int32 dwProcessId
);
}
public static class utils
{
private const UInt32 PROCESS_QUERY_INFORMATION = 0x400;
private const UInt32 PROCESS_VM_READ = 0x010;
public static string getfolder()
{
Int32 pid = Process.GetCurrentProcess().Id;
int capacity = 2000;
StringBuilder sb = new StringBuilder(capacity);
IntPtr proc;
if ((proc = NativeMethods.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pid)) == IntPtr.Zero)
return "";
NativeMethods.QueryFullProcessImageName(proc, 0, sb, ref capacity);
string fullPath = sb.ToString(0, capacity);
return Path.GetDirectoryName(fullPath) + @"\";
}
}
#14楼
å°è¯ä»¥ä¸ç®åç代ç è¡ï¼
string exePath = Path.GetDirectoryName( Application.ExecutablePath);
#15楼
å¦ææ¨æ£å¨å¯»æ¾ä¸.NET Coreå ¼å®¹çæ¹å¼ï¼è¯·ä½¿ç¨
System.AppContext.BaseDirectory
.NET Framework 4.6å.NET Core 1.0ï¼å.NET Standard 1.3ï¼ä¸å¯¹æ¤è¿è¡äºä»ç»ã 请åé ï¼ AppContext.BaseDirectory屿§ ã
æ ¹æ®æ¤é¡µé¢ ï¼
è¿æ¯.NET Coreä¸AppDomain.CurrentDomain.BaseDirectoryçé¦éæ¿ä»£å
#16楼
ææ²¡æçå°ä»»ä½äººå°.Net Coreåå°æä¾çLocalPath转æ¢ä¸ºå¯ç¨çSystem.IOè·¯å¾ï¼æä»¥è¿æ¯æççæ¬ã
public static string GetApplicationRoot()
{
var exePath = new Uri(System.Reflection.
Assembly.GetExecutingAssembly().CodeBase).LocalPath;
return new FileInfo(exePath).DirectoryName;
}
è¿ä¼å°å®æ´çâ Cï¼\\ xxx \\ xxxâæ ¼å¼çè·¯å¾è¿åå°æ¨çä»£ç æå¨çä½ç½®ã
#17楼
ä¸ä¸è¡å°ä¸ºæ¨æä¾ä¸ä¸ªåºç¨ç¨åºè·¯å¾ï¼
var applicationPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)
ä¸è¿°è§£å³æ¹æ¡å¨ä»¥ä¸æ åµä¸æ£å¸¸å·¥ä½ï¼
- ç®åçåºç¨ç¨åº
- å¨å¦ä¸ä¸ªåä¸ï¼Assembly.GetEntryAssemblyï¼ï¼å°è¿ånull
- DLLä»åµå ¥å¼èµæºä½ä¸ºåèæ°ç»å è½½ï¼å¹¶ä½ä¸ºAssembly.Loadï¼byteArrayOfEmbeddedDllï¼å è½½å°AppDomainã
- 使ç¨Monoç
æç»å ï¼å ¶ä»æ¹æ³æ æï¼mkbundle
#18楼
è·å坿§è¡è·¯å¾çæ¹æ³æå¾å¤ï¼æä»¬åºè¯¥ä½¿ç¨åªç§æ¹æ³åå³äºæä»¬çéæ±ï¼è¿éæä¸ä¸ªè®¨è®ºä¸åæ¹æ³ç龿¥ã
è·ååºç¨ç¨åºå¯æ§è¡è·¯å¾çä¸åæ¹æ³
#19楼
å¦ä¸ç§è§£å³æ¹æ¡æ¯ä½¿ç¨æåå½åè·¯å¾çç¸å¯¹è·¯å¾ï¼
Path.GetFullPath(".")
#20楼
å¯è½æç¹æäºï¼ä½è¿å¼å¾ä¸æï¼
Environment.GetCommandLineArgs()[0];
æè æ´æ£ç¡®å°è·åç®å½è·¯å¾ï¼
System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
ç¼è¾ï¼
ä¸å°äººæåºï¼ä¸è½ä¿è¯
GetCommandLineArgs
è¿åç¨åºåç§°ã 请åé å½ä»¤è¡ä¸ç第ä¸ä¸ªåè¯ä» æ¯çº¦å®çç¨åºåç§° ã è¿ç¯æç« ç¡®å®æåºâ尽管å¾å°æWindowsç¨åºä½¿ç¨æ¤æªçï¼æèªå·±é½ä¸ç¥éï¼âã å æ¤å¯ä»¥â欺éªâ
GetCommandLineArgs
ï¼ä½æä»¬æ£å¨è°è®ºæ§å¶å°åºç¨ç¨åºã æ§å¶å°åºç¨ç¨åºé常åå¿«åèã å æ¤ï¼è¿ç¬¦åæçKISSå²å¦ã
#21楼
对äºå¯¹asp.net Webåºç¨ç¨åºæå ´è¶£çä»»ä½äººã è¿æ¯æä¸ç§ä¸åæ¹æ³çç»æ
protected void Application_Start(object sender, EventArgs e)
{
string p1 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string p2 = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
string p3 = this.Server.MapPath("");
Console.WriteLine("p1 = " + p1);
Console.WriteLine("p2 = " + p2);
Console.WriteLine("p3 = " + p3);
}
ç»æ
p1 = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\a897dd66\ec73ff95\assembly\dl3\ff65202d\29daade3_5e84cc01
p2 = C:\inetpub\SBSPortal_staging\
p3 = C:\inetpub\SBSPortal_staging
该åºç¨ç¨åºå®é 䏿¯ä»â Cï¼\\ inetpub \\ SBSPortal_stagingâè¿è¡çï¼å æ¤ç¬¬ä¸ä¸ªè§£å³æ¹æ¡ç»å¯¹ä¸éç¨äºWebåºç¨ç¨åºã
#22楼
æ¨å¯ä»¥éè¿ä¸¤ä¸ªéé¡¹æ¥æ¥æ¾åºç¨ç¨åºçç®å½ï¼å ·ä½åå³äºæ¨çç¨éã
// to get the location the assembly is executing from
//(not necessarily where the it normally resides on disk)
// in the case of the using shadow copies, for instance in NUnit tests,
// this will be in a temp directory.
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
//To get the location the assembly normally resides on disk or the install directory
string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
//once you have the path you get the directory with:
var directory = System.IO.Path.GetDirectoryName(path);
#23楼
System.Reflection.Assembly.GetExecutingAssembly()
ã
Location
1
妿åªéè¦ç®å½ï¼åå°å ¶ä¸
System.IO.Path.GetDirectoryName
ç»å使ç¨ã
1æ ¹æ®Mindorå ççè¯è®ºï¼è¿åæ£å¨æ§è¡çç¨åºéçå½åä½ç½®ï¼è¯¥ä½ç½®å¯è½ä¸æ§è¡æ¶å³ä¸ºç¨åºéçä½ç½®ã 对äºå·å½±å¤å¶ç¨åºéï¼æ¨å°å¨tempç®å½ä¸è·å¾ä¸ä¸ªè·¯å¾ã
System.Reflection.Assembly.GetExecutingAssembly().Location
å°è¿åç¨åºéçâæ°¸ä¹ âè·¯å¾ã
System.Reflection.Assembly.GetExecutingAssembly().CodeBase
#24楼
æ¨å¯è½æ£å¨å¯»æ¾è¿æ ·åï¼
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
#25楼
æ¨å¯ä»¥ä½¿ç¨ä»¥ä¸ä»£ç æ¥è·åå½ååºç¨ç¨åºç®å½ã
AppDomain.CurrentDomain.BaseDirectory
#26楼
Assembly.GetEntryAssembly().Location
æ
Assembly.GetExecutingAssembly().Location
ä¸
System.IO.Path.GetDirectoryName()
ç»å使ç¨ï¼ä» è·åç®å½ã
å°½ç®¡å¤§å¤æ°æ åµä¸ç®å½ç¸åï¼ä½
GetEntryAssembly()
å
GetExecutingAssembly()
çè·¯å¾å¯ä»¥ä¸åã
使ç¨
GetEntryAssembly()
æ¨å¿ é¡»ç¥éï¼å¦æè¾å ¥æ¨¡åä¸å管çï¼å³C ++æVB6坿§è¡æä»¶ï¼ï¼åè¿å
null
ã å¨è¿äºæ åµä¸ï¼å¯ä»¥ä½¿ç¨Win32 APIä¸ç
GetModuleFileName
ï¼
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetModuleFileName(HandleRef hModule, StringBuilder buffer, int length);