現在ログインしているユーザーと異なる権限でプログラムを実行したい場合、
GUI上で右クリックで別のユーザーとして実行で実行できます。
コマンドライン上からもRUNAS.EXEを使用すると実行できます。
runas /netonly /user:administrator "notepad.exe"
なお、runasを実行するためには、RunAS Serverが起動している必要があります。
下記のプログラムでインストーラを起動すれば、権限のないユーザーにもAdministratorsなどの権限でプログラムを起動することができます。
このページの管理人はプログラミングは初心者です。使用の結果については一切責任を持ちません。
また、内容への突っ込みもご遠慮ください。
コマンドライン上からもRUNAS.EXEを使用すると実行できます。
runas /netonly /user:administrator "notepad.exe"
なお、runasを実行するためには、RunAS Serverが起動している必要があります。
下記のプログラムでインストーラを起動すれば、権限のないユーザーにもAdministratorsなどの権限でプログラムを起動することができます。
#include "stdafx.h"
#include <windows.h>
#include <string.h>
#define Buffers 0x200
#define LOGON_WITH_PROFILE 0x00000001
typedef BOOL (WINAPI *CREATEPROCESSWITHLOGONWD)(LPCWSTR lpUsername,
LPCWSTR lpDomain,LPCWSTR lpPassword,DWORD dwLogonFlags,
LPCWSTR lpApplicationName,LPWSTR lpCommandLine,
DWORD dwCreationFlags,LPVOID lpEnvironment,
LPCWSTR lpCurrentDirectory,LPSTARTUPINFOW lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation);
CREATEPROCESSWITHLOGONWD CreateProcessWithLogonWD = NULL;
int main(int argc, char* argv[])
{
WCHAR cmd[Buffers];
WCHAR user[Buffers];
WCHAR domain[Buffers];
WCHAR pass[Buffers];
STARTUPINFOW si;
PROCESS_INFORMATION pi;
HMODULE hADVAPI32;
hADVAPI32 = LoadLibrary("ADVAPI32.DLL");
if(hADVAPI32 < (HINSTANCE)HINSTANCE_ERROR)
return(-3);
CreateProcessWithLogonWD = (CREATEPROCESSWITHLOGONWD)
GetProcAddress(hADVAPI32,"CreateProcessWithLogonW");
if ( CreateProcessWithLogonWD == NULL )
return(-2);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"UserName",-1,user,sizeof user);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"Domian",-1,domain,sizeof domain);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"Program.exe",-1,cmd,sizeof cmd);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,"Password",-1,pass,sizeof pass);
si.cb = sizeof(si);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = 0;
si.cbReserved2 = 0;
si.lpReserved2 = NULL;
if ( CreateProcessWithLogonWD(user,domain,pass,LOGON_WITH_PROFILE,NULL,cmd,
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE |
CREATE_NEW_PROCESS_GROUP | CREATE_SEPARATE_WOW_VDM,
NULL,NULL,&si,&pi) == FALSE ){
printf("実行エラー\n");
return(-1);
}
return 0;
}
注意事項このページの管理人はプログラミングは初心者です。使用の結果については一切責任を持ちません。
また、内容への突っ込みもご遠慮ください。
