2016-09-09 12 views
-1

UACダイアログを回避して、高い特権を持つプログラムや他のプログラムを再起動できるC++プログラムを作成したいと思います。あなたは、Windowsのシステムディレクトリにnotepad.exeを検索する場合C++でタスクを作成するには?

+0

... – Ben

+0

私は不明ですコンパイラエラーの修正が必要な場合、またはタスクの作成に役立つ場合は – deW1

+0

コンパイラはエラーではなく警告を提示しています。 @ dew1と同じですが、私はあなたが助けたいものが不明です。 – jwpfox

答えて

2

、私はちょうどその少しより直接的にやってお勧めする:

#include <string.h> 
#include <windows.h> 

int main() { 
    char path[_MAX_PATH]; 

    GetSystemDirectory(path, sizeof(path)); 

    strcat_s(path, "/notepad.exe"); 

    WinExec(path, SW_SHOWNORMAL); 
} 

は、指定したユーザーアカウントの下で結果を実行するには、通常使用したいですCreateProcessWithLogonWCreateProcessAsUserCreateProcessWithTokenWのようないくつかの選択肢がありますが、通常はCreateProcessWithLogonWが好ましい)。

これはワイド文字を使用していますので、それはおそらく全体のワイド文字を使用するのが最も簡単ですが、このような何か:原料のこの種は、通常、スクリプト言語と多くの方が簡単です

#include <string.h> 
#include <windows.h> 

template <size_t N> 
DWORD GetSystemDirectory(wchar_t (&buffer)[N]) { 
    return GetSystemDirectoryW(buffer, N); 
} 

template <size_t N> 
void append(wchar_t (&buffer)[N], wchar_t const *src) { 
    wcscat_s(buffer, N, src); 
} 

int main() { 
    wchar_t path[_MAX_PATH]; 

    GetSystemDirectory(path); 

    append(path, L"/Notepad.exe"); 

    PROCESS_INFORMATION pi; 
    CreateProcessWithLogonW(L"Username", L"machine_name", L"password", 0, path, NULL, CREATE_NEW_CONSOLE, NULL, NULL, NULL, &pi); 
} 
+0

しかし、私は高い特権でノートパッドを実行したい – Raindrop7

+0

@ raindrop7:先に進んでください。あなたの質問は、notepad.exeへのパスを取得する部分のように思えました。これは、これをきれいに行う方法を示しています。別のユーザーアカウントでプログラムを実行する方法についてもう一度質問しますか? –

+0

あなたのプログラムは、アプリケーションが必要な高度を開くことができません?仰角が必要な "diskraid.exe"と言ってみよう。 – Raindrop7

関連する問題