none
UWP - Brokered Component - Process.Start pour un autre user échoué - System.ComponentModel.Win32Exception (0x80004005): Accès refusé

    Discussion générale

  • Bonjour,

    Je travaille avec Visual Studio 2015 Update 3. Je développe une application UWP et utilise un Brokered Component.

    Le but est de démarrer un process depuis l'application UWP en tant qu'un autre utilisateur :

    Voici le code de mon Brokered Server :

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Security;
    using System.Text;
    using System.Threading.Tasks;
    
    using Windows.Foundation;
    
    namespace BCServer
    {
    	public sealed class Component1
    	{
    
    		/// <summary>
    		/// Start process for <paramref name="executable"/> using <paramref name="username"/> as OS user identified by <paramref name="password"/> or
    		/// using current user if <paramref name="username"/> or <paramref name="password"/> is null or empty. 
    		/// </summary>
    		/// <param name="username"></param>
    		/// <param name="password"></param>
    		/// <param name="executable"></param>
    		/// <returns>Process if sucess, exception as string if an exception is raised</returns>
    		public string StartProcess(string username, string password, string executable)
    		{
    			try
    			{
    				ProcessStartInfo psi = new ProcessStartInfo();
    				if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
    				{
    					psi.UserName = username;
    					SecureString ss = new SecureString();
    					foreach (char c in password)
    					{
    						ss.AppendChar(c);
    					}
    					psi.Password = ss;
    				}
    
    				psi.FileName = executable;
    				psi.UseShellExecute = false;
    				return( Process.Start(psi).ToString());
    			}
    			catch (Exception ex)
    			{
    				return ex.ToString();
    			}
    		}
    	}
    }

    Voici le code associé à l'évènement click du bouton

    private void btnStartProcess_Click(object sender, RoutedEventArgs e)
    		{
    			textBlockResult.Text = string.Empty;
    			BCServer.Component1 bcs = new BCServer.Component1();
    			textBlockResult.Text = bcs.StartProcess(textBoxUsername.Text, passwordtBoxPassword.Password, textBoxExecutable.Text);
    		}

    Voici le résultat:

    Quelqu'un pourrait-il m'aider ?

    Merci par avance.

    Dimitri


    mardi 12 décembre 2017 10:15

Toutes les réponses