windows服务如何访问映射驱动器中的文件?
来源:互联网 发布:怎么推广淘宝客 编辑:程序博客网 时间:2024/06/10 09:55
最近遇到一个customer issue,跟踪分析后,发现错误原因是通过windows服务启动的进程无法访问映射驱动器中的文件,根本就找不到这个文件,
HANDLE hFF = FindFirstFile(L"z:\\a\\a.txt",&fd);
if (hFF == INVALID_HANDLE_VALUE)
{
error("cannot find the file");
}
错误码是3.
尝试了各种办法,最后找到了一种方法:
1.服务用localsystem身份运行
2.用如下方式启动进程
BOOL GetTokenByName(HANDLE &hToken,LPWSTR lpName) { if(!lpName) { return FALSE; } HANDLE hProcessSnap = NULL; BOOL bRet = FALSE; PROCESSENTRY32 pe32 = {0}; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return (FALSE); pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hProcessSnap, &pe32)) { do { if(!lstrcmp(_wcsupr(pe32.szExeFile),_wcsupr(lpName))) { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,pe32.th32ProcessID); bRet = OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken); CloseHandle (hProcessSnap); return (bRet); } } while (Process32Next(hProcessSnap, &pe32)); bRet = TRUE; OutputDebugString(L"GetToken success!"); } else bRet = FALSE; OutputDebugString(L"GetToken fail!"); CloseHandle (hProcessSnap); return (bRet); } BOOL RunProcess(LPCTSTR lpImage) { if(!lpImage) { return FALSE; } HANDLE hToken; if(!GetTokenByName(hToken,L"EXPLORER.EXE")) { return FALSE; } STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb= sizeof(STARTUPINFO); //si.lpDesktop = TEXT("winsta0//default"); BOOL bResult = CreateProcessAsUser(hToken,lpImage,NULL,NULL,NULL, FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); CloseHandle(hToken); if(bResult) { getchar(); } else { OutputDebugString(L"CreateProcessAsUser false!/r/n"); } return bResult; }主要原理是获取explorer进程的token,然后启动进程.以上2个函数来源于网上,特此感谢....
- windows服务如何访问映射驱动器中的文件?
- Windows 服务操作映射网络驱动器示例
- windows的映射驱动器
- 如何映射网络驱动器
- 如何映射网络驱动器?
- Windows下如何将服务器目录映射到本地驱动器
- windows下映射网络驱动器
- Windows 服务 与 Web服务中访问网络驱动器的问题(ERROR [HY024])
- 如何安装在Windows XP中的300GB驱动器
- windows service 无法访问映射的网络驱动器
- 将CentOS目录映射为Windows驱动器
- CentOS虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?
- CentOS虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?
- cenos7虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?
- 如何在应用程序中映射网络驱动器
- 如何映射网络驱动器(转载)
- 详细讲解如何映射网络驱动器
- dos处理文件映射网驱动器
- KVO DEMO
- C# DataGridView显示行号的三种方法
- C++经典书籍推荐 .
- Bluetooth pair use command line
- Cracking the coding interview Q1.1
- windows服务如何访问映射驱动器中的文件?
- 暴强贴:从.NET平台调用Win32 API
- tomcat配置(连接池)
- struts1和struts2的区别
- MySQL的REGEXP 和 like 在匹配上的区别
- eclipse 常用快捷键
- 香港拼音--汉字对照表
- windows和linux下Select()函数的区别
- iOS中操作CoreData框架设计