2011-01-17 2 views
1

すべて 私はCreateProcessWithLogonメソッドを使用して、ソフトウェアをインストールするための非認定ユーザーのソフトウェアをインストールしています.Windows XPユーザーにとってはうまくいきましたが、同じアプリケーションでWindows 7マシンで次のエラーが表示されます。CreateProcessWithLogonエラーは仰角が必要

System.ComponentModel.Win32Exception(0x80004005が)は:要求された操作は、いずれかが私にそれを修正するための任意のアイデアを提案してください標高

が必要です。

Private Const LOGON_NETCREDENTIALS_ONLY As Integer = &H2 
Private Const NORMAL_PRIORITY_CLASS As Integer = &H20 
Private Const CREATE_DEFAULT_ERROR_MODE As Integer = &H4000000 
Private Const CREATE_NEW_CONSOLE As Integer = &H10 
Private Const CREATE_NEW_PROCESS_GROUP As Integer = &H200 
Private Const LOGON_WITH_PROFILE As Integer = &H1 
Private Const LOGON_WITH_PROFILE1 As Integer = 0 


    Dim siStartup As STARTUPINFO 
    Dim piProcess As PROCESS_INFORMATION 
    Dim intReturn As Integer 
    Dim bResult As Boolean = False 
    Dim result As Integer 
    Dim sFile, sArg As String 

    IMP_USER_NAME = AppSettings("UserName") 
    IMP_PASS_WORD = AppSettings("Password") 
    IMP_DOMAIN_NAME = AppSettings("Domain") 

    Try 

     If sApplication.EndsWith(".msi") Then 
      sApplication = sApplication & " " & """ALLUSERS=1""" 
      sArg = "msiexec.exe /i """ & sApplication & """" 
      sFile = vbNullString 
     Else 
      If bToExecute = False Then 
       sArg = vbNullString 
       sFile = sApplication 
      Else 
       sArg = "cmd /c """ & sApplication & """" 
       sFile = vbNullString 
      End If 
     End If 

     siStartup.cb = Marshal.SizeOf(siStartup) 
     siStartup.dwFlags = 0 


     intReturn = CreateProcessWithLogon(IMP_USER_NAME, IMP_DOMAIN_NAME, IMP_PASS_WORD, LOGON_WITH_PROFILE, sFile, sArg, _ 
         NORMAL_PRIORITY_CLASS Or CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, _ 
         IntPtr.Zero, IntPtr.Zero, siStartup, piProcess) 

おかげで、 Senthilさん

+4

エラーメッセージがあなたに問題を伝えています。操作には仰角が必要です。私はあなたがまずUACについて読んで学び、次に何か質問があればもう一度やり直すことをお勧めします。 –

答えて

0

はおそらく理由は、あなたがLOGON_WITH_PROFILEフラグを使用することであるが、以下のように私は、コードを使用しています。デフォルトでは

を以下のあなたが読むことができるCreateProcessWithLogonWドキュメントの「備考」の部分では、CreateProcessWithLogonW はHKEY_USERSレジストリ キーに指定されたユーザ プロファイルをロードしません。これは、HKEY_CURRENT_USER レジストリキーの 情報にアクセスすると、通常の 対話型ログオンと一致する結果の が生成されないことを意味します。 、CreateProcessWithLogonW、 、LOGON_WITH_PROFILE、または LoadUserProfile関数を呼び出す前に、ユーザ レジストリハイブをHKEY_USERSに読み込む責任があります。

LOGON_WITH_PROFILEフラグなしで同じコードを試してみることをおすすめします。それが問題であり、フラグを使用する必要がある場合は、LoadUserProfile関数とUnloadUserProfileをコードに使用する必要があります。

+2

それはそうではありません、UACが彼を止めています。 –

+1

@Hans Passant:あなたが正しいかどうかはわかりません。ドキュメントのCreateProcessAsUser(http://msdn.microsoft.com/en-us/library/ms682429(v=VS.85).aspxを参照)では、「CreateProcessWithLogonWには特別な権限は必要ありませんが、指定されたユーザーアカウントは対話的にログオンできるようにする必要があります。一般に、CreateProcessWithLogonWを使用して代替の資格情報を持つプロセスを作成することをお勧めします。 "だから、 'CreateProcessWithLogonW'はUACで独立して仕事をしているようです。しかし、** senthil **は簡単にテストできます。 – Oleg

1

http://blogs.msdn.com/b/cjacks/archive/2010/02/01/why-can-t-i-elevate-my-application-to-run-as-administrator-while-using-createprocesswithlogonw.aspxを参照してください:あなたはCreateProcessWithLogon

Alternativeleyと呼ばれるアプリケーションのprivelegesを高めるためにShellExec()を実行する中間工程を必要とする、あなたはその中間のプロセスを作成しないようにCreateProcessWithLogonでcmd /c cd <targetDir>&<targetDrive>:&<execName>を呼び出すことができます。

関連する問題