Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Service cannot start
Message
De
19/09/2010 18:33:40
 
 
À
19/09/2010 17:01:15
Information générale
Forum:
ASP.NET
Catégorie:
Autre
Versions des environnements
Environment:
VB 9.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01481547
Message ID:
01481891
Vues:
49
>Worst, they cannot have any authorization to write an entry in the Event Viewer. In the first line of that method where it doesn't work, I tried to log in into the Event Viewer. It ended up in the same result as well. What else could be a factor here?

In regards to writing to the Event Log, the problem *is* a security issue. I've used the event log also and have tried several different ways to get the Event Source created programmatically. Finally decided on a Web Service web method, which can just be accessed through IE.It only needs to be done once. Here's the web method:

The line containing "Events.EventSources" is simply an Enum containing the names of EventSources we might use in our app. If you only have one, then you can just get rid of that whole foreach loop and just hardcode the name of your source in the if.
[WebMethod(Description = "Set server Event Log sources.")]
public string SetEventLogSources(string Username, string Password, string Domain)
{
	//This will keep track of the impersonation token
	const int LOGON_TYPE_INTERACTIVE = 2;
	const int LOGON_TYPE_PROVIDER_DEFAULT = 0;
	string logName = "Application";
	IntPtr userToken = IntPtr.Zero;

	if (LogonUser(Username, Domain, Password, LOGON_TYPE_INTERACTIVE, LOGON_TYPE_PROVIDER_DEFAULT, ref userToken))
		{
		//Initialize user token 
		WindowsIdentity oIdentity = new WindowsIdentity(userToken);
		WindowsImpersonationContext oContext = oIdentity.Impersonate();

		foreach (string source in Enum.GetNames(typeof(Events.EventSources)))
		{
			if (EventLog.SourceExists(source) == false)
				EventLog.CreateEventSource(source, logName);
		}

		//Undo impersonation
		oContext.Undo();

		return "Event source registration successful!";
	}
	else
	{
		return "Unable to process user credentials for event source registration.";
	}
}

// Using this api to get an accessToken of specific Windows User by its user name and password	
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static public extern bool LogonUser(string userName, string domain, string passWord, int logonType, int logonProvider, ref IntPtr accessToken);
~~Bonnie
Bonnie Berent DeWitt
NET/C# MVP since 2003

http://geek-goddess-bonnie.blogspot.com
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform