GetCurrentProcess 获取当前进程的一个伪句柄GetCurrentProcess 总是返回-1(即0xFFFFFFFF),代表当前进程 。
这个句柄不在句柄表中,不是真正的句柄,所以叫伪句柄 。
$getcurrent是什么文件夹你好,这是利用360安装WIN10时解压后的文件,就是WIN10安装文件 。安好后是能删除的 。
在Unity中使用Process.GetProcess(),获得很多无效的进程呢????这个问题在StackExchange上有详细的说明,可惜我的英文水平太差 , 属于只可意会不可言传那伙儿的,所以这里就不翻译原文了,以免贻笑大方 。请自己看原文吧:
http://gamedev.stackexchange.com/questions/69589/problem-getting-information-about-running-processes-with-getprocesses-in-unit
用我的话总结,就是GetProcess()函数只取回所有的进程的基本信息,并不检查进程的状态 。而调试器却获取了进程的具体信息,那么调试器就发现有的进程设置了HasExited位 。于是就抛出了这个异常 。其实属于误报,也可以算作调试器的一个issue吧 。
setprocessworkingsetsize getcurrentprocess会导致系统问题吗伪句柄可以代替句柄被函数调用,用句柄调用当然也行 。相当于是一个别名的概念,但伪句柄不需要去closehandle , 因为它只是个别名,如果closehandle伪句柄,造成的结果可能是无法预料的 。虽然是伪句柄 , 也是当前的 。openprocesstoken不用获取的伪句柄,用进程真实句柄也可 。Len函数只接收两种:Len(string | varname)其他的都不行,varname可以是variant,也可以是用户自定义类型 , 但不能是数组!
用C++完成电脑定时关机之星时出现如下提示框 , 怎么加几行代码使其隐藏?。鼻蟠笊?,谢谢如果你调用的shell (command命令)来关机设置强制关机就ok如system(“shutdown -f -s -t 0”);即可如果调用api函数ExitWindowsExBOOL SystemShutdown(){HANDLE hToken;TOKEN_PRIVILEGES tkp;/* OpenProcessToken() 这个函数的作用是打开一个进程的访问令牌GetCurrentProcess() 函数的作用是得到本进程的句柄*/if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))return FALSE;// LookupPrivilegeValue() 的作用是修改进程的权限LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);tkp.PrivilegeCount = 1; // one privilege to set 赋给本进程特权tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;// AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);if (GetLastError() != ERROR_SUCCESS) //失败return FALSE;if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0)) //参数在这里设置 。强行退出WINDOWS(EWX_FORCE) 。return FALSE;return TRUE;}
使命召唤8bf3.exe无法定位程序输入点Getcurrentprocessornumber于动态链接库KERNE32.dll哥你的游戏到底是使命召唤还是战地3?如果是战地3的话不支持xp的
无法定位程序输入点GetSystemFirmwareTable于动态链接库KERNEL32.dll重装一下触控板驱动程序试试、
驱动下载:
看一下主机后面的主机编号,然后到下列网址,在页面中间第二个对话框把编号输入查找
[url]http://support1.lenovo.com.cn/lenovo/wsi/Modules/Drive.aspx?seq=2[/url]
无法定位程序输入点GetCurrentProcessorNumber 于动态链接库 KERNEL32.dll上 。高分求右键C盘 属性 工具 查错 开始 把两个勾都打上 确定 是 然后重启电脑 等电脑自检修复就可以了
极品飞车16点击运行提示无法定位程序输入点GETCURRENTPROCESSORNUMBER于动态链接库KERNEL32.DLL上 求解啊这个是不支持XP的,
支持win7和Vista
留给编程高手的问题如果你是要想如何做windows服务程序的话,可以使用windows Services API族,具体步骤如下 , 首先连接服务控制管理数据库使用OpenSCManager函数,然后调用CreateService函数创建服务,成功后使用RegisterServiceCtrlHandler函数注册控制处理例程,然后通过SetServiceStatus函数设置服务状态,这个时候就可以进入你的主程序进行处理了,当然了这个步骤是将注册服务和处理事务都在一个程序内,如果分开的话就需要使用RegisterServiceProcess函数进行注册了 。
我以前做过一个通用的注册服务程序 , 你只需将自己处理函数放在我程序指定的位置就行了 。下面贴出代码 , 但是这个地方自动将空格置顶,如果你觉得看的不舒服,可以访问http://www.wyos.net获得代码或者直接mail我wy_lslrt@yahoo.com.cn , 我给你发过去 。
需要补充一下,为何要有一个MsgBox()函数,因为在windows的服务程序中是没有GUI环境的如果需要使用GUI必须手动的打开窗口站,才可以使用GUI 。
===================Service.h=====================
#define WYCONST_SLEEPTIME4000
#define WYCONST_FILEPATHSIZE 1024
#define WYCONST_MSGBOX_ERROR 65535
#define WYCONST_SERVICE_NAME "NTMService"
SERVICE_STATUSWY_SvcStatus;
SERVICE_STATUS_HANDLE WY_hSvcStatusHandle;
TCHARWY_szBinpath[WYCONST_FILEPATHSIZE];
DWORDWY_dwCurState;//服务进程当前状态
/*-----------------ServiceMain()----------------------*/
/*
服务入口函数
*/
VOID WINAPI ServiceMain(DWORD WY_dwArgc, LPTSTR * WY_lpszArgv);
/*-----------------ServiceContro()l--------------------*/
/*
服务控制响应函数
*/
VOID WINAPI ServiceControl(DWORD WY_dwCtrlCode);
/*-----------------IsServiceSetup()-------------------*/
/*
判断服务是否已经安装函数
return value:
FALSE 没有安装
TRUE 已经安装
*/
BOOL IsServiceSetup();
/*----------------IsServiceRun()-------------------*/
/*
判断服务是否已经运行
return value:
FALSE 没有运行
TRUE 已经运行
*/
BOOL IsServiceRun();
/*----------------SetupService()---------------------*/
/*
安装服务函数
return value:
FALSE 安装失败
TRUE 安装成功
*/
BOOL SetupService();
/*----------------RunService()----------------------*/
/*
运行服务
此函数是在安装服务后调用
return value:
FALSE 服务运行失败
TRUE 服务成功运行
*/
BOOL RunService(SC_HANDLEWY_hSvcHandler);
/*-----------------MsgBox()------------------------*/
/*
显示一个对话框
此函数是在服务程序中显示一个对话框
parameter:
LPCTSTRWY_lpszText 要显示的信息
LPCTSTRWY_lpszTitle 要显示的对话框的标题
UINTWY_uType 要显示的对话框类型
类型值查阅MSDN的MessageBox的uType的值
return value:
如果成功返回,值是下面的一种
IDABORTAbort 按钮被按下.
IDCANCELCancel 按钮被按下.
IDCONTINUEContinue 按钮被按下.
IDIGNOREIgnore 按钮被按下.
IDNONo 按钮被按下.
IDOKOK 按钮被按下.
IDRETRYRetry 按钮被按下.
IDTRYAGAINTry 按钮被按下.
IDYESYes 按钮被按下.
WYCONST_MSGBOX_ERROR显示对话框失败.
*/
int MsgBox(LPCTSTR WY_lpszText,LPCTSTR WY_lpszTitle,UINT WY_uType);
=================Service.c======================
/*
在ServiceMain 中注释"请在这里插入处理函数"处放入处理函数
*/
#include
#include
#include
#include
#include
#include
#include "service.h"
void main()
{
//定义服务入口结构
SERVICE_TABLE_ENTRYWY_ServiceEntry[2];
DWORDWY_dwErrCode;
DWORDWY_dwRetValue;
charWY_szErrString[256];
//先获得当前服务程序的路径
WY_dwRetValue = https://www.zaoxu.com/jjsh/bkdq/GetModuleFileName(NULL,WY_szBinpath,WYCONST_FILEPATHSIZE);
if(!WY_dwRetValue)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"GetModuleFileName Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return;
}
OutputDebugString(WY_szBinpath);
//下面if else 是判断服务是否已经安装
//如果已经安装则进入服务入口函数
//否则进行安装服务
if(IsServiceSetup())
{
OutputDebugString("Service have setuped");
if(!IsServiceRun())
{
WY_ServiceEntry[0].lpServiceName = WYCONST_SERVICE_NAME;
WY_ServiceEntry[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
WY_ServiceEntry[1].lpServiceName = NULL;
WY_ServiceEntry[1].lpServiceName = NULL;
//启动服务的控制分配机制线程
if(!StartServiceCtrlDispatcher(WY_ServiceEntry))
{
WY_dwErrCode = GetLastError();
if(WY_dwErrCode == ERROR_INVALID_DATA)
{
OutputDebugString((LPCTSTR)"无效的服务入口结构");
return;
}
if(WY_dwErrCode == ERROR_SERVICE_ALREADY_RUNNING)
{
OutputDebugString((LPCTSTR)"服务已经运行");
return;
}
OutputDebugString((LPCTSTR)"启动服务入口函数未知错误");
return;
}
}
else
{
OutputDebugString((LPCTSTR)"服务已经运行");
return;
}
}
else
{//安装服务
OutputDebugString("Not find Service");
if(!SetupService())
{
OutputDebugString((LPCTSTR)"安装服务失败");
return;
}
}
}
/*---------------服务进程必须提供的函数--------------------*/
VOID WINAPI ServiceMain(DWORD WY_dwArgc,LPTSTR *WY_lpszArgv)
{
//初始化服务状态
OutputDebugString((LPCTSTR)"初始化服务状态");
WY_SvcStatus.dwServiceType = SERVICE_WIN32;
WY_SvcStatus.dwCurrentState = SERVICE_START_PENDING;
WY_SvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
WY_SvcStatus.dwWin32ExitCode = NO_ERROR;
WY_SvcStatus.dwServiceSpecificExitCode = NO_ERROR;
WY_SvcStatus.dwCheckPoint = 0;
WY_SvcStatus.dwWaitHint = 0;
//注册控制函数
OutputDebugString((LPCTSTR)"注册控制函数");
WY_hSvcStatusHandle = RegisterServiceCtrlHandler(WYCONST_SERVICE_NAME,ServiceControl);
if(WY_hSvcStatusHandle == ERROR_INVALID_NAME)
{
OutputDebugString((LPCTSTR)"无效的服务名称");
return;
}
if(WY_hSvcStatusHandle == ERROR_SERVICE_DOES_NOT_EXIST)
{
OutputDebugString((LPCTSTR)"未找到指定服务");
return;
}
//成功注册
WY_SvcStatus.dwCurrentState = SERVICE_RUNNING;
//设置服务进程状态
OutputDebugString((LPCTSTR)"设置服务进程状态");
SetServiceStatus(WY_hSvcStatusHandle,&WY_SvcStatus);
WY_dwCurState = SERVICE_RUNNING;
//
//请在这里加入处理函数
while(WY_SvcStatus.dwCurrentState == SERVICE_RUNNING)
{
OutputDebugString((LPCTSTR)"在这里加入你的处理代码");
//MsgBox("test",WYCONST_SERVICE_NAME,0);
Sleep(WYCONST_SLEEPTIME);
}
return;
}
VOID WINAPI ServiceControl(DWORD WY_dwCtrlCode)
{
OutputDebugString((LPCTSTR)"接受控制");
switch(WY_dwCtrlCode)
{
case SERVICE_CONTROL_STOP:
OutputDebugString((LPCTSTR)"服务退出");
WY_SvcStatus.dwCurrentState = SERVICE_STOPPED;
WY_SvcStatus.dwWin32ExitCode = NO_ERROR;
SetServiceStatus(WY_hSvcStatusHandle,&WY_SvcStatus);
WY_dwCurState = SERVICE_STOPPED;
return;
case SERVICE_CONTROL_SHUTDOWN:
OutputDebugString((LPCTSTR)"系统关机");
WY_SvcStatus.dwCurrentState = SERVICE_STOPPED;
WY_SvcStatus.dwWin32ExitCode = NO_ERROR;
SetServiceStatus(WY_hSvcStatusHandle,&WY_SvcStatus);
WY_dwCurState = SERVICE_STOPPED;
return;
default:
break;
}
SetServiceStatus(WY_hSvcStatusHandle,&WY_SvcStatus);
}
/*---------------------------服务运行前的配置函数--------------------*/
BOOL IsServiceSetup()
{
SC_HANDLEWY_hSCHandle;
DWORDWY_dwErrCode;
DWORDWY_dwBufferNeeded = 0;
DWORDWY_dwEntriesNum = 0;
DWORDWY_dwNextEntry = 0;
DWORDWY_i;
charWY_szErrString[256];
BOOLWY_isSetup = FALSE;
ENUM_SERVICE_STATUSWY_essService,*WY_pessService;
//打开服务控制管理数据库
WY_hSCHandle = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(!WY_hSCHandle)
{
WY_dwErrCode = GetLastError();
if(WY_dwErrCode == ERROR_ACCESS_DENIED)
{
OutputDebugString((LPCTSTR)"请求被拒绝");
exit(0);
}
if(WY_dwErrCode == ERROR_DATABASE_DOES_NOT_EXIST)
{
OutputDebugString((LPCTSTR)"服务程序数据库未找到");
exit(0);
}
if(WY_dwErrCode == ERROR_INVALID_PARAMETER)
{
OutputDebugString((LPCTSTR)"无效的参数");
exit(0);
}
OutputDebugString((LPCTSTR)"OpenSCManager 未知错误");
exit(0);
}
//成功打开服务控制管理数据库,枚举服务
//首先获得需要多大的缓存空间
if(!EnumServicesStatus(WY_hSCHandle,SERVICE_WIN32,SERVICE_STATE_ALL,&WY_essService,sizeof(ENUM_SERVICE_STATUS),
&WY_dwBufferNeeded,&WY_dwEntriesNum,&WY_dwNextEntry))
{
WY_dwErrCode = GetLastError();
if(WY_dwErrCode == ERROR_MORE_DATA) //获得了需要的缓存大小 , 重新获得服务数据
{
WY_dwBufferNeeded += sizeof(ENUM_SERVICE_STATUS);
WY_pessService = (LPENUM_SERVICE_STATUS)malloc(WY_dwBufferNeeded);
if(!EnumServicesStatus(WY_hSCHandle,SERVICE_WIN32,SERVICE_STATE_ALL,WY_pessService,WY_dwBufferNeeded,
&WY_dwBufferNeeded,&WY_dwEntriesNum,&WY_dwNextEntry))
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"EnumServiceStatus Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
exit(0);
}
//开始枚举服务
for(WY_i = 0;WY_i<WY_dwEntriesNum;WY_i++)
{
WY_dwErrCode = (DWORD)_tcscmp(WY_pessService[WY_i].lpServiceName,WYCONST_SERVICE_NAME);
if(WY_dwErrCode == 0) //找到安装的服务
{
WY_isSetup = TRUE;
WY_dwCurState = WY_pessService[WY_i].ServiceStatus.dwCurrentState;
break;
}
}
}
else
{
sprintf(WY_szErrString,"EnumServiceStatus Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
exit(0);
}
}
free(WY_pessService) ;
CloseServiceHandle(WY_hSCHandle);
return WY_isSetup;
}
BOOL IsServiceRun()
{
if(WY_dwCurState == SERVICE_RUNNING)
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOL SetupService()
{
SC_HANDLEWY_hSCHandler,WY_hSvcHandler;
DWORDWY_dwErrCode;
charWY_szErrString[256];
//打开服务控制管理数据库
WY_hSCHandler = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(!WY_hSCHandler)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"OpenSCManager Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return FALSE;
}
//创建服务
WY_hSvcHandler = CreateService(WY_hSCHandler,WYCONST_SERVICE_NAME,WYCONST_SERVICE_NAME,SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,WY_szBinpath,
NULL,NULL,NULL,NULL,NULL);
if(!WY_hSvcHandler)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"CreateService Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return FALSE;
}
if(!RunService(WY_hSvcHandler))
{
OutputDebugString((LPCTSTR)"运行服务失败");
return FALSE;
}
CloseServiceHandle(WY_hSvcHandler);
CloseServiceHandle(WY_hSCHandler);
return TRUE;
}
BOOL RunService(SC_HANDLE WY_hSvcHandler)
{
DWORDWY_dwErrCode;
charWY_szErrString[256];
if(!StartService(WY_hSvcHandler,0,NULL))
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"StartService Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return FALSE;
}
return TRUE;
}
int MsgBox(LPCTSTR WY_lpszText, LPCTSTR WY_lpszTitle, UINT WY_uType)
{
// DWORDWY_dwCurrentTID;
DWORDWY_dwErrCode;
charWY_szErrString[256];
HWINSTAWY_hWinStaSave,WY_hWinStaUser;
HDESKWY_hDeskSave,WY_hDeskUser;
intWY_nResult;
//先保存服务进程原先的窗口站
GetDesktopWindow();
WY_hWinStaSave = GetProcessWindowStation();
if(!WY_hWinStaSave)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"GetProcessWindowStation Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return WYCONST_MSGBOX_ERROR;
}
WY_hDeskSave = GetThreadDesktop(GetCurrentThreadId());
if(!WY_hDeskSave)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"GetThreadDesktop Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return WYCONST_MSGBOX_ERROR;
}
//为了显示对话框,首先打开WinSta0 窗口站,再打开Default 桌面
WY_hWinStaUser = OpenWindowStation("WinSta0",FALSE,MAXIMUM_ALLOWED);
if(!WY_hWinStaUser)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"OpenWindowStation Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
return WYCONST_MSGBOX_ERROR;
}
SetProcessWindowStation(WY_hWinStaUser);
WY_hDeskUser = OpenDesktop("Default",0,FALSE,MAXIMUM_ALLOWED);
if(!WY_hDeskUser)
{
WY_dwErrCode = GetLastError();
sprintf(WY_szErrString,"OpenDesktop Error %d",WY_dwErrCode);
OutputDebugString(WY_szErrString);
//打开Default 桌面错误,并恢复原先的窗口站
SetProcessWindowStation(WY_hWinStaSave);
CloseWindowStation(WY_hWinStaUser);
return WYCONST_MSGBOX_ERROR;
}
SetThreadDesktop(WY_hDeskUser);
//显示MessageBox 对话框
WY_nResult = MessageBox(NULL,WY_lpszText,WY_lpszTitle,WY_uType);
//恢复原先的窗口站
SetThreadDesktop(WY_hDeskSave);
SetProcessWindowStation(WY_hWinStaSave);
CloseDesktop(WY_hDeskUser);
CloseWindowStation(WY_hWinStaUser);
return WY_nResult;
}
救命啊,高手进来看下一大堆东西只能说看不明白,我只能说佩服你 , 你怎么把这些复制过来的,软件编程太神奇了 ,
如何捕捉程序异常/crash 并生成 dump 文件程序崩溃(crash)的时候,为了以后能够调试分析问题,可以使用WinDBG要把当时程序内存空间数据都保存下来 , 生成的文件称为dump 文件 。
步骤:
1) 打开WinDBG并将之Attach 到crash的程序进程
2) 输入产生dump 文件的命令
WinDBG产生dump 文件的命令是 .dump,可以选择不同的参数来生成不同类型的dump文件 。
选项(1): /m
命令行示例:.dump /m C:\dumps\myapp.dmp
注解: 缺省选项,生成标准的minidump,转储文件通常较小,便于在网络上通过邮件或其他方式传输 。这种文件的信息量较少 , 只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息 。
选项(2): /ma
命令行示例:.dump /ma C:\dumps\myapp.dmp
注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块 , 等等),文件很大,但如果条件允许(本机调试,局域网环境),推荐使用这中dump 。
选项(3):/mFhutwd
命令行示例:.dump /mFhutwd C:\dumps\myapp.dmp
注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump 。包含了通过minidump能够得到的最多的信息 。是一种折中方案 。
上面介绍如如何用WinDBG 生成crash dump 《WinDBG 技巧:如何生成Dump 文件(.dump 命令) 》 , 但是用户机器上通常不安装WinDBG,而且多数用户也不知道怎么使用WinDBG 。所以最好是自己程序里面能够捕捉exception/crash,并且生成crash dump , 然后通过网络传回到自己服务器 。
捕捉exception 可以用API 函数 SetUnhandledExceptionFilter。
生成crash dump 可以用DbgHelp.dll 里面的MiniDumpWriteDump 函数 。
LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter( __in LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter );
BOOL WINAPI MiniDumpWriteDump( __in HANDLE hProcess, __in DWORD ProcessId, __in HANDLE hFile, __in MINIDUMP_TYPE DumpType, __in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, __in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, __in PMINIDUMP_CALLBACK_INFORMATION CallbackParam );
【代码实例】
#include
#include
#include
// 自定义的exectpion filter
LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS*pExceptionPointers)
{
SetErrorMode( SEM_NOGPFAULTERRORBOX );
//收集信息
CStringW strBuild;
strBuild.Format(L"Build: %s %s", __DATE__, __TIME__);
CStringW strError;
HMODULE hModule;
WCHAR szModuleName[MAX_PATH] = L"";
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCWSTR)pExceptionPointers->ExceptionRecord->ExceptionAddress,&hModule);
GetModuleFileName(hModule, szModuleName, ARRAYSIZE(szModuleName));
strError.AppenedFormat(L"%s %d , %d ,%d.",szModuleName,pExceptionPointers->ExceptionRecord->ExceptionCode,pExceptionPointers->ExceptionRecord->ExceptionFlags,pExceptionPointers->ExceptionRecord->ExceptionAddress);
//生成 mini crash dump
BOOL bMiniDumpSuccessful;
WCHAR szPath[MAX_PATH];
WCHAR szFileName[MAX_PATH];
WCHAR* szAppName = L"AppName";
WCHAR* szVersion = L"v1.0";
DWORD dwBufferSize = MAX_PATH;
HANDLE hDumpFile;
SYSTEMTIME stLocalTime;
MINIDUMP_EXCEPTION_INFORMATION ExpParam;
GetLocalTime( &stLocalTime );
GetTempPath( dwBufferSize, szPath );
StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName);
CreateDirectory( szFileName, NULL );
StringCchPrintf( szFileName, MAX_PATH, L"%s%s\\%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",
szPath, szAppName, szVersion,
stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
stLocalTime.wHour, stLocalTime.wMinute,stLocalTime.wSecond,
GetCurrentProcessId(), GetCurrentThreadId());
hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0,0);
MINIDUMP_USER_STREAM UserStream[2];
MINIDUMP_USER_STREAM_INFORMATION UserInfo;
UserInfo.UserStreamCount = 1;
UserInfo.UserStreamArray = UserStream;
UserStream[0].Type = CommentStreamW;
UserStream[0].BufferSize = strBuild.GetLength()*sizeof(WCHAR);
UserStream[0].Buffer = strBuild.GetBuffer();
UserStream[1].Type = CommentStreamW;
UserStream[1].BufferSize = strError.GetLength()*sizeof(WCHAR);
UserStream[1].Buffer = strError.GetBuffer();
ExpParam.ThreadId = GetCurrentThreadId();
ExpParam.ExceptionPointers = pExceptionPointers;
ExpParam.ClientPointers = TRUE;
MINIDUMP_TYPE MiniDumpWithDataSegs = MiniDumpNormal
| MiniDumpWithHandleData
| MiniDumpWithUnloadedModules
| MiniDumpWithIndirectlyReferencedMemory
| MiniDumpScanMemory
| MiniDumpWithProcessThreadData
| MiniDumpWithThreadInfo;
bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL,NULL);
// 上传mini dump 到自己服务器(略)
...
return EXCEPTION_CONTINUE_SEARCH; //或者 EXCEPTION_EXECUTE_HANDLER 关闭程序
}
int _tmain()
{
// 设置 execption filter
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
....
return 0;
}
正常情况下不会生成dump , 需要自己在程序中添加代码实现,一般是利用MS的dbghelp.dll提供的DbgHelpCreateUserDump来生成,用WinDbg来分析 , 期间需要编译程序生成的.pdb文件 。可以参考BlackBox、google breakpad等
crash 文件生成的路径:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="0"
"Debugger"="\"D:\\WinDBG\\ntsd.exe\" -p %ld -e %ld -g -noio -c \".dump /ma /u d:\\dbgdmp\\dmp.dmp; q"
"UserDebuggerHotKey"=dword:00000000
转载仅供参考,版权属于原作者 。祝你愉快,满意请采纳哦
vb的用windows信息进行消息传递用到的 api
postmessage
OpenProcess
VirtualAllocEx
VirtualFreeEx
WriteProcessMemory
ReadProcessMemory
CloseHandle
GetCurrentProcessId
GetCurrentProcess
先在A 获取本进程的 句柄 GetCurrentProcess,然后 用VirtualAllocEx 分配内存,把数据写进去,然后postmessage 发送消息 给 B 进程的 窗口发送消息 , 消息包括 A 进程 pid 和 分配的 内存首地址,B 中 打开传过来的进程的句柄,然后 读取 刚在A 程序用写入的数据
还有就是可以直接获取 存字符的首地址,传到b 中 获取,
GetCurrentProcess()函数问题伪句柄可以代替句柄被函数调用 , 用句柄调用当然也行 。相当于是一个别名的概念 , 但伪句柄不需要去closehandle,因为它只是个别名,如果closehandle伪句柄,造成的结果可能是无法预料的 。虽然是伪句柄,也是当前的 。openprocesstoken不用获取的伪句柄 , 用进程真实句柄也可 。Len函数只接收两种:Len(string | varname)其他的都不行 , varname可以是variant,也可以是用户自定义类型,但不能是数组!
已知某个窗口的句柄,如何获取拥有这个窗口的进程的句柄?The GetProcessHandleFromHwnd function retrieves a process handle from a window handle. HANDLE WINAPI GetProcessHandleFromHwnd(HWND hwnd,);这个函数通过窗口句柄获得进程句柄 。有了进程句柄,PID是不是就知道怎么获得了?什么?不知道?那我告诉你,GetProcessId可以通过进程句柄获得进程ID:DWORD WINAPI GetProcessId(__inHANDLE Process);
用VB怎么列出windows正在运行的所有进程使用API GetCurrentProcessVB声明Declare Function GetCurrentProcess Lib "kernel32" Alias "GetCurrentProcess" () As Long说明获取当前进程的一个伪句柄返回值Long,当前进程的伪句柄注解只要当前进程需要一个进程句柄 , 就可以使用这个伪句柄 。该句柄可以复制,但不可继承 。不必调用CloseHandle函数来关闭这个句柄GetCurrentProcessIdVB声明Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessId" () As Long说明获取当前进程一个唯一的标识符返回值Long,当前的进程标识符GetCurrentThreadVB声明Declare Function GetCurrentThread Lib "kernel32" Alias "GetCurrentThread" () As Long说明获取当前线程的一个伪句柄返回值Long,当前线程的伪句柄注解只要当前线程需要使用一个线程句柄,就可以使用这个伪句柄(但在其他任务线程中都无效) 。该句柄可以复制,但不可继承 。不必调用CloseHandle函数来关闭这个句柄GetCurrentThreadIdVB声明Declare Function GetCurrentThreadId Lib "kernel32" Alias "GetCurrentThreadId" () As Long说明获取当前线程一个唯一的线程标识符返回值Long,当前的线程标识符用法:声明后可以像普通函数一样调用
在dll中怎么获取当前进程的实例句柄用GetWindowThreadProcessId来获取进程ID
然后用OpenProcess来获取进程句柄 , 当然你要有足够的权限
GetModuleHandle只能获取当前进程的模块句柄吗LoadLibrary是把一个模块映射进调用进程的地址空间,需要时增加引用计数而GetModuleHandle是返回一个以映射进调用进程地址空间的模块的句柄并不增加引用计数
无法定位程序输入点 InitializeCritigalSection 于动态链接库 KERNEL32.dll 上建议你用360系统急救箱急救一下,急救后用它恢复一下系统文件和DLL文件,重启电脑看看能否正常,注意用急救箱必须在联网的状态下运行 。
运行游戏时出现的 无法定位程序输入点 GetCurrentProcessorNumber 于动态链接库kernel32.dll 肿么办搜索下载KERNEL32.dll,解压后复制到c:windows/system32/下,在开始-运行下输入regsvr32KERNEL32.dll回车 望采纳
光环斯巴达突袭无法定位程序输入点Getcurrentprocessornumber于动态链接库KERNEL32.DLL上怎么办?、??出现这个意味着你有麻烦了 , 只有重装系统才能彻底解决这个问题,希望能帮到你,谢谢 , 欢迎追问 。
战地3为什么启动的时候"无法定位程序输入点getcurrentprocessornumber于动态链接库kernel32.dll上"你的电脑是不是xp?是xp的话,改成win7再说,xp是不能玩战地3的 。。。
无法定位程序输入点 GetCurrentProcessorNUMER 于动态链接库KERNEL32.dll上怎么办?下载杀毒系统急救箱 , 或者下载金山卫士系统完美修复工具,进行一键修复 。该工具对其他DLL丢失问题的修复同样有效 。也可以下载更新direct9.0、DX,VC++,PhysX 。
无法定位程序输入点openvxdhandle于动态连接库kernel32.dllDSOUND.DLL在网上下载了,放在system32里 。。。重启运行exe的任意文件都不行 。
提示"无法定位程序输入点OPENVXDHANDLE于动态链接库KERNEL32.DLL上"
最后找到了这个 。很好用
补充一句:XP系统把下载的文件放在这里 。C:\WINDOWS\system32
地址:http://www.zxjcm.cn/blog/article.asp?id=542&page=1
这个dll放在C:\WINDOWS\system32里后绝对解决问题 。
无法定位程序输入点OpenVxDHandle于动态连接库KERNEL32.dll上QQ医生和360安全卫士也不可全信,它们不能替代杀毒软件,特别是提示删除文件的时候更要小心 , 最好将提示的文件用杀毒软件再扫描一遍 。
看情况,应该是同删除这三个文件有关系 , 下载的对应文件也分各种版本的,如XP,VISTA,SP1,SP2等都不一样,如果能到安装同样系统的主机上拷一下也可以 , 实在搞不定,还是重装或恢复一下系统比较快 。
无法定位程序输入点MakeCriticalSectionGlobal于kernel32.dll开机就会出现这个 , 首先在开始 --> 运行 -->msconfig---> 启动--> 选项里面把你这个“GetSystemFirmwareTable于动态链接库KERNEL32.dll”取消掉... .. 然后 ---> 应用---> 重启 。这样开机就不出现了,然后解决这个问题 。
你是不是直接从网上下载的ddraw.dll覆盖的呢?这样需要重新注册一下,点击开始-运行-输入regsvr32 kernel32.dll,确定 。重启 。或者点击开始-运行-输入cmd,确定后输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
重新注册所有的dll文件,有可能会解决该问题 。
如果还是不行,单击“开始→运行”,输入“gpedit.msc” , 然后依次展开“计算机配置→管理模板→系统→Windows文件保护”,然后双击“设置文件保护扫描”并将其设置为“禁用”即可无提示 。
我估计出现这个问题可能和directX有关,实在不行只能重装系统了……
无法定位程序输入点 OpenVxDHandle 于动态连接库 KERNEL32.dll上 。从网上下载一个KERNEL32.dll,然后从BIOS中删除原有的KERNEL32.dll,再把下好的KERNEL32.dll复制到C:\WINDOWS\system32目录下
c#怎么获取程序当前运行路径C#获取当前应用程序所在路径及环境变量
一、获取当前文件的路径
string str1=Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名 。
string str2=Environment.CurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径 。(备注:按照定义,如果该进程在本地或网络驱动器的根目录中启动 , 则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:\”) 。如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径[如“C:\mySubDirectory”]) 。
string str3=Directory.GetCurrentDirectory(); //获取应用程序的当前工作目录 。
string str4=AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集 。
string str5=Application.StartupPath;//获取启动了应用程序的可执行文件的路径 , 不包括可执行文件的名称 。
string str6=Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称 。
string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称 。
1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
获取模块的完整路径 。
2. System.Environment.CurrentDirectory
获取和设置当前目录(该进程从中启动的目录)的完全限定目录 。
3. System.IO.Directory.GetCurrentDirectory()
获取应用程序的当前工作目录 。这个不一定是程序从中启动的目录啊 , 有可能程序放在C:\www里,这个函数有可能返回C:\Documents and Settings\ZYB\,或者C:\Program Files\Adobe\,有时不一定返回什么东东 , 这是任何应用程序最后一次操作过的目录 , 比如你用Word打开了E:\doc\my.doc这个文件,此时执行这个方法就返回了E:\doc了 。
4. System.AppDomain.CurrentDomain.BaseDirectory
获取程序的基目录 。
5. System.Windows.Forms.Application.StartupPath
获取启动了应用程序的可执行文件的路径 。效果和2、5一样 。只是5返回的字符串后面多了一个"\"而已 。
6. System.Windows.Forms.Application.ExecutablePath
获取启动了应用程序的可执行文件的路径及文件名,效果和1一样 。
7. System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
获取和设置包括该应用程序的目录的名称 。
二、操作环境变量
利用System.Environment.GetEnvironmentVariable()方法可以很方便地取得系统环境变量,如:System.Environment.GetEnvironmentVariable("windir")就可以取得windows系统目录的路径 。
以下是一些常用的环境变量取值:
System.Environment.GetEnvironmentVariable("windir");
System.Environment.GetEnvironmentVariable("INCLUDE");
System.Environment.GetEnvironmentVariable("TMP");
System.Environment.GetEnvironmentVariable("TEMP");
System.Environment.GetEnvironmentVariable("Path");
三、应用实例
编写了一个WinForm程序 , 项目文件存放于D:\Projects\Demo , 编译后的文件位于D:\Projects\Demo\bin\Debug , 最后的结果如下:
1、System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName=D:\Projects\Demo\bin\Debug\Demo.vshost.exe
2、System.Environment.CurrentDirectory=D:\Projects\Demo\bin\Debug
3、System.IO.Directory.GetCurrentDirectory()=D:\Projects\Demo\bin\Debug
4、System.AppDomain.CurrentDomain.BaseDirectory=D:\Projects\Demo\bin\Debug\
5、System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase=D:\Projects\Demo\bin\Debug\
6、System.Windows.Forms.Application.StartupPath=D:\Projects\Demo\bin\Debug
7、System.Windows.Forms.Application.ExecutablePath=D:\Projects\Demo\bin\Debug\Demo.EXE
System.Environment.GetEnvironmentVariable("windir")=C:\WINDOWS
System.Environment.GetEnvironmentVariable("INCLUDE")=C:\Program Files\Microsoft Visual Studio.NET 2005\SDK\v2.0\include\
System.Environment.GetEnvironmentVariable("TMP")=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp
System.Environment.GetEnvironmentVariable("TEMP")=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp
System.Environment.GetEnvironmentVariable("Path")=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\
C#怎样获取项目的debug路径总结C#获取当前路径的7种方法
C#获取当前路径的方法如下:
1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
-获取模块的完整路径 。
2. System.Environment.CurrentDirectory
-获取和设置当前目录(该进程从中启动的目录)的完全限定目录 。
3. System.IO.Directory.GetCurrentDirectory()
-获取应用程序的当前工作目录 。这个不一定是程序从中启动的目录啊,有可能程序放在C:\www里,这个函数有可能返回C:\Documents and Settings\ZYB\,或者C:\Program Files\Adobe\,有时不一定返回什么东东,我也搞不懂了 。
4. System.AppDomain.CurrentDomain.BaseDirectory
-获取程序的基目录 。
5. System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
-获取和设置包括该应用程序的目录的名称 。
6. System.Windows.Forms.Application.StartupPath
-获取启动了应用程序的可执行文件的路径 。效果和2、5一样 。只是5返回的字符串后面多了一个"\"而已
7. System.Windows.Forms.Application.ExecutablePath
-获取启动了应用程序的可执行文件的路径及文件名,效果和1一样 。
对于Windows程序和Web 应用程序来说,他们运行的路径是不一样的,所以关键是判断当前运行的程序是哪种程序.于是我们可以使用如下的代码
1string path = "";
2
3if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)//Windows应用程序则相等
4
5...{
6
7path = AppDomain.CurrentDomain.BaseDirectory;
8
9}
10
11else
12
13...{
14
15path = AppDomain.CurrentDomain.BaseDirectory + "Bin\";
16
17}
这样如果我们写了一个类库,类库中用到了Assembly.LoadFrom,由于是通用类库,所以可能用到Windows程序中也可能用到Web中,那么用上面的代码就很方便了.
1、Server.MapPath
2、System.Windows.Forms.StartupPath
3、Type.Assembly.Location
C#获取当前路径方法2可以应用于控制台应用程序,WinForm应用程序,Windows服务,方法1可以应用于Web应用程序,方法3都可以应用 。
但方法3是加载应用程序的路径 。如果是Web应用程序,取得的路径是:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files目录 。所以Web项目还是使用Server.MapPath吧 。否则建议使用方法2 。如果自己新建类库 。可以加入对System.Windows.Forms.StartupPath的引用后使用 。
C#获取当前路径的方法就总结到这里,希望对大家有所帮助 。
C#获取程序当前路径的方法
//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名) 。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径 。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)
//获取当前 Thread 的当前应用程序域的基目录 , 它由程序集冲突解决程序用来探测程序集 。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
//获取和设置包含该应用程序的目录的名称 。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称 。
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)
//获取启动了应用程序的可执行文件的路径 , 包括可执行文件的名称 。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
//获取应用程序的当前工作目录(不可靠) 。
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
c# 获取相对路径
一、获取当前文件的路径
1.System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
获取模块的完整路径,包括文件名 。
2.System.Environment.CurrentDirectory
获取和设置当前目录(该进程从中启动的目录)的完全限定目录 。
3.System.IO.Directory.GetCurrentDirectory()
获取应用程序的当前工作目录 。这个不一定是程序从中启动的目录啊 , 有可能程序放在C:\www里,这个函数有可能返回C:\Documents and Settings\ZYB\,或者C:\Program Files\Adobe\,有时不一定返回什么东东 , 这是任何应用程序最后一次操作过的目录,比如你用Word打开了E:\doc\my.doc这个文件,此时执行这个方法就返回了E:\doc了 。
4. System.AppDomain.CurrentDomain.BaseDirectory
获取程序的基目录 。
5. System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
获取和设置包括该应用程序的目录的名称 。
6. System.Windows.Forms.Application.StartupPath
获取启动了应用程序的可执行文件的路径 。效果和2、5一样 。只是5返回的字符串后面多了一个"\"而已
7. System.Windows.Forms.Application.ExecutablePath
获取启动了应用程序的可执行文件的路径及文件名,效果和1一样 。
二、操作环境变量
利用System.Environment.GetEnvironmentVariable()方法可以很方便地取得系统环境变量,如:
System.Environment.GetEnvironmentVariable("windir")就可以取得windows系统目录的路径 。
以下是一些常用的环境变量取值:
System.Environment.GetEnvironmentVariable("windir");
System.Environment.GetEnvironmentVariable("INCLUDE");
System.Environment.GetEnvironmentVariable("TMP");
System.Environment.GetEnvironmentVariable("TEMP");
System.Environment.GetEnvironmentVariable("Path");
System.Environment.SystemDirectory ;C:/windows/system32目录
最后贴出我进行上面操作获得的变量值 , 事先说明 , 本人是编写了一个WinForm程序,项目文件存放于D:\Visual Studio Projects\MyApplication\LifeAssistant,编译后的文件位于D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug,最后的结果如下:
1、System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\LifeAssistant.exe
2、System.Environment.CurrentDirectory=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug
3、System.IO.Directory.GetCurrentDirectory()=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug
1 asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”;
2.c# winform用
A:“Application.StartupPath”:获取当前应用程序所在目录的路径,最后不包含“\”;
B:“Application.ExecutablePath ”:获取当前应用程序文件的路径,包含文件的名称;
C:“AppDomain.CurrentDomain.BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”;
D:“System.Threading.Thread.GetDomain().BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”;
E:“Environment.CurrentDirectory”:获取当前应用程序的路径,最后不包含“\”;
F:“System.IO.Directory.GetCurrentDirectory”:获取当前应用程序的路径,最后不包含“\”;
3.c# windows service
用“AppDomain.CurrentDomain.BaseDirectory”
或“System.Threading.Thread.GetDomain().BaseDirectory”;
用“Environment.CurrentDirectory”和
“System.IO.Directory.GetCurrentDirectory”将得到“ system32”目录的路径;
如果要使用“Application.StartupPath”或“Application.ExecutablePath ”,需要手动添加对“System.Windows.Forms.dll ”的引用 , 并在程序开头用“using System.Windows.Forms”声明该引用;
4.在卸载程序获取系统安装的目录:
System.Reflection.Assembly curPath = System.Reflection.Assembly.GetExecutingAssembly();
string path=curPath.Location;//得到安装程序类SetupLibrary文件的路径,获取这个文件路径所在的目录即得到安装程序的目录;
4、System.AppDomain.CurrentDomain.BaseDirectory=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\
5、System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\
6、System.Windows.Forms.Application.StartupPath=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug
7、System.Windows.Forms.Application.ExecutablePath=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\LifeAssistant.exe
System.Environment.GetEnvironmentVariable("windir")=C:\WINDOWS
System.Environment.GetEnvironmentVariable("INCLUDE")=C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include\
System.Environment.GetEnvironmentVariable("TMP")=C:\DOCUME~1\zhoufoxcn\LOCALS~1\Temp
System.Environment.GetEnvironmentVariable("TEMP")=C:\DOCUME~1\zhoufoxcn\LOCALS~1\Temp
System.Environment.GetEnvironmentVariable("Path")=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\jdk1.5.0\bin;C:\MySQLServer5.0\bin;C:\Program Files\Symantec\pcAnywhere\;C:\Program Files\Microsoft SQL Server\80\Tools\BINN
C# 相对路径 系统路径
2007-12-22 09:53
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称 。
stringstr5=Application.StartupPath;
//可获得当前执行的exe的文件名 。
stringstr1=Process.GetCurrentProcess().MainModule.FileName;
//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径 。备注按照定义 , 如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:\”) 。如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:\mySubDirectory”) 。
stringstr2=Environment.CurrentDirectory;
//获取应用程序的当前工作目录 。
stringstr3=Directory.GetCurrentDirectory();
//获取基目录,它由程序集冲突解决程序用来探测程序集 。
stringstr4=AppDomain.CurrentDomain.BaseDirectory;
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称 。
stringstr5=Application.StartupPath;
//获取启动了应用程序的可执行文件的路径 , 包括可执行文件的名称 。
stringstr6=Application.ExecutablePath;
//获取或设置包含该应用程序的目录的名称 。
stringstr7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
//例子
Application.StartupPath;
//可以得到F:\learning\c#Training\win\win\bin\Debug
//注意自己补两个\
Application.StartupPath+"\\3.jpg";
在c#中 , 相对路径是用"."和".."表示,
"."代表当前目录,
".."代表上一级录 。
例如 假设我用vs2005在D:\My Documents\Visual Studio 2005\Projects目录里创建了一个名叫controls的项目 , 即在Projects文件夹里有一个controls文件夹 , controls文件夹里有三个文件:controls.slncontrols文件夹GulfOfStLawrence文件夹 。
D:\My Documents\Visual Studio 2005\Projects\Controls\Controls\bin\Debug是这个简单项目能够运行的可执行文件Controls.exe
现在我想要 D:\My Documents\Visual Studio 2005\Projects\Controls\GulfOfStLawrence文件夹下的Gulf_of_St._Lawrence.mxd(arcgis desktop)工程文件路径 。
那么相对路径应该就是"..\..\..\GulfOfStLawrence\Gulf_of_St._Lawrence.mxd"
即string filename = @"..\..\..\GulfOfStLawrence\Gulf_of_St._Lawrence.mxd";
心得:1.用相对路径能增加项目的可移植性 。使一个工程在移植过程中变得简单,节省了大量布置与工程相关的文件的时间 。(如果设置的是绝对路径) 。
2.使用相对路径也使程序代码变得简单
3. 但有一点必须注意:(只能在同一个驱动器里(如:都在D:里)使用相对路径) 。
c#中怎么获得当前路径Response.Write(this.GetType());
Response.Write(this.GetType().Assembly.Location+"")获得当前路径
Response.Write(this.GetType().BaseType+"");
Response.Write(this.GetType().BaseType.Assembly.Location+"");获得父节点路径
c#中怎么获得当前路径C#获取文件路径的几种方法
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称 。
stringstr5=Application.StartupPath;
//可获得当前执行的exe的文件名 。
stringstr1=Process.GetCurrentProcess().MainModule.FileName;
// 获取和设置当前目录(即该进程从中启动的目录)的完全限定路径 。备注按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:\”) 。如果该进程在子目录中启动 , 则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:\mySubDirectory”) 。
stringstr2=Environment.CurrentDirectory;
//获取应用程序的当前工作目录 。
stringstr3=Directory.GetCurrentDirectory();
//获取基目录,它由程序集冲突解决程序用来探测程序集 。
stringstr4=AppDomain.CurrentDomain.BaseDirectory;
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称 。
stringstr5=Application.StartupPath;
//获取启动了应用程序的可执行文件的路径 , 包括可执行文件的名称 。
stringstr6=Application.ExecutablePath;
//获取或设置包含该应用程序的目录的名称 。
stringstr7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase
(别忘了引用类库using,,,)
网站中可以在类文件中用绝对方式访问Server对象、Session、Response、Request等对象:
System.Web.HttpContext.Current.Server.MapPath()
System.Web.HttpContext.Current.Session
System.Web.HttpContext.Current.Response
System.Web.HttpContext.Current.Request
C#中如何获取文件的相对路径?【getcurrentprocess】应用程序路:径string programpath=Application.StartupPath;
string relativepath=fullpath.SubString(programpath.Length);
//其中fullpath为全路径,不明白欢迎继续追问
