下面的代码可以运行。但是在一个其他的工程中(比如基于Dialog的)调用CreateProcessWithLogonW时,提示说没有定义,弄了半天,没有解决。请指教:)#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>int wmain(int argc, WCHAR *argv[])
{
if (argc != 4) {
wprintf(L"Usage: %s user pwd cmd\n", argv[0]);
return -1;
}
STARTUPINFOW si;
ZeroMemory(&si,sizeof(si));
si.cb= sizeof(si);
PROCESS_INFORMATION piProcess; if (!CreateProcessWithLogonW(argv[1], L"", argv[2], 0, argv[3], NULL, 0,
NULL, NULL, &si, &piProcess)) {
wprintf(L"err [%u]\n", GetLastError());
} return 0;
}
#include <windows.h>
#include <stdio.h>int wmain(int argc, WCHAR *argv[])
{
if (argc != 4) {
wprintf(L"Usage: %s user pwd cmd\n", argv[0]);
return -1;
}
STARTUPINFOW si;
ZeroMemory(&si,sizeof(si));
si.cb= sizeof(si);
PROCESS_INFORMATION piProcess; if (!CreateProcessWithLogonW(argv[1], L"", argv[2], 0, argv[3], NULL, 0,
NULL, NULL, &si, &piProcess)) {
wprintf(L"err [%u]\n", GetLastError());
} return 0;
}
MSDN指出:
Requirements
Windows NT/2000 or later: Requires Windows 2000 or later.
Windows 95/98/Me: Unsupported.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Advapi32.lib.
Unicode: Implemented only as Unicode.
BOOL CreateProcessWithLogonW(
LPCWSTR lpUsername, // user's name
LPCWSTR lpDomain, // user's domain
LPCWSTR lpPassword, // user's password
DWORD dwLogonFlags, // logon option
LPCWSTR lpApplicationName, // executable module name
LPWSTR lpCommandLine, // command-line string
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInfo // process information
);STARTUPINFOW si;
ZeroMemory(&si,sizeof(si));
si.cb= sizeof(si);
PROCESS_INFORMATION piProcess; if (!CreateProcessWithLogonW(argv[1], L"", argv[2], 0, argv[3], NULL, 0,
NULL, NULL, &si, &piProcess)) {
wprintf(L"err [%u]\n", GetLastError());
}
bobob(PDFViewer2.0 Release拉!) 的方法就是
但是宣称CreateProcessWithLogonW应该有问题,估计要加extern宏另一种动态库的方法:
typedef BOOL(_cdecl *PCreateProcessWithLogonW)(
LPCWSTR lpUsername, // user's name
LPCWSTR lpDomain, // user's domain
LPCWSTR lpPassword, // user's password
DWORD dwLogonFlags, // logon option
LPCWSTR lpApplicationName, // executable module name
LPWSTR lpCommandLine, // command-line string
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInfo // process information
);BOOL load()
{
HINSTANCE hinstDLL;
hinstDLL = LoadLibrary("advapi32.dll");
if (NULL == hinstDLL)
{
TRACE("LoadLibrary error.\n");
return FALSE;
}
PCreateProcessWithLogonW CreateProcessWithLogonW;
CreateProcessWithLogonW = (PCreateProcessWithLogonW)GetProcAddress(hinstDLL, "CreateProcessWithLogonW");
CreateProcessWithLogonW ("your param here!");
FreeLibrary(hinstDLL);
return TRUE;
}
error LNK2001: unresolved external symbol "int __stdcall CreateProcessWithLogonW(unsigned short const *,unsigned short const *,unsigned short const *,unsigned long,unsigned short const *,unsigned short *,unsigned long,void *,unsig
ned short const *,struct _STARTUPINFOW *,struct _PROCESS_INFORMATION *)" (?CreateProcessWithLogonW@@YGHPBG00K0PAGKPAX0PAU_STARTUPINFOW@@PAU_PROCESS_INFORMATION@@@Z)
Release/RunAsUser.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.如何解决呢?BOOL CreateProcessWithLogonW(
LPCWSTR lpUsername, // user's name
LPCWSTR lpDomain, // user's domain
LPCWSTR lpPassword, // user's password
DWORD dwLogonFlags, // logon option
LPCWSTR lpApplicationName, // executable module name
LPWSTR lpCommandLine, // command-line string
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInfo // process information
);STARTUPINFOW si;
ZeroMemory(&si,sizeof(si));
si.cb= sizeof(si);
PROCESS_INFORMATION piProcess; if (!CreateProcessWithLogonW(argv[1], L"", argv[2], 0, argv[3], NULL, 0,
NULL, NULL, &si, &piProcess)) {
wprintf(L"err [%u]\n", GetLastError());
}
extern "C" {
BOOL CreateProcessWithLogonW(
LPCWSTR lpUsername, // user's name
LPCWSTR lpDomain, // user's domain
LPCWSTR lpPassword, // user's password
DWORD dwLogonFlags, // logon option
LPCWSTR lpApplicationName, // executable module name
LPWSTR lpCommandLine, // command-line string
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInfo // process information
);
}
extern "C" {
BOOL WINAPI CreateProcessWithLogonW(
LPCWSTR lpUsername, // user's name
LPCWSTR lpDomain, // user's domain
LPCWSTR lpPassword, // user's password
DWORD dwLogonFlags, // logon option
LPCWSTR lpApplicationName, // executable module name
LPWSTR lpCommandLine, // command-line string
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCWSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFOW lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInfo // process information
);
}
不是了,这个函数在头文件中,你再看看我提的问题:下面的代码可以运行。但是在一个其他的工程中(非Console的,比如基于Dialog的)调用CreateProcessWithLogonW时,提示说没有定义,弄了半天,没有解决。请指教:)#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>int wmain(int argc, WCHAR *argv[])
{
if (argc != 4) {
wprintf(L"Usage: %s user pwd cmd\n", argv[0]);
return -1;
}
STARTUPINFOW si;
ZeroMemory(&si,sizeof(si));
si.cb= sizeof(si);
PROCESS_INFORMATION piProcess; if (!CreateProcessWithLogonW(argv[1], L"", argv[2], 0, argv[3], NULL, 0,
NULL, NULL, &si, &piProcess)) {
wprintf(L"err [%u]\n", GetLastError());
} return 0;
}