|
Hello,
I'm in a large organization, and sometimes have things running on a server that I have to leave running and my profile will go idle.
How can I catch a system event for remote log off? That way I can auto answer it and cancel the remote log off. The screen I would see when someone is trying to log me off is
http://img841.imageshack.us/img841/9306/disconnected1.jpg[^]
and if I don't respond in 30 seconds, I can be kicked. The organization is far too large to stop this at a global level, so how can I protect my processes and have them continue to run without being booted?
I wrote a form that will catch the the following
SystemEvents.SessionEnding += new SessionEndingEventHandler(sessionHandler);
but that does not seem to be the event that is occurring when a remote log off occurs?
This is for server 2008.
Thanks for reading!
modified 21-Dec-11 15:08pm.
|
|
|
|
|
I think if you log into the admin console they can't log you off.
|
|
|
|
|
Hi,
Thanks for the reply, this is in server 2008 (I forgot to put that earlier) and there is only /admin. I tried /admin and that was able to be logged off.
|
|
|
|
|
If the other guy has admin rights to the box, I don't think you can stop it. Remember, you are using the same protocol (RDP) that he is. You could disable RDP access for everybody except a special user you create, but I think a domain admin could still override you. Or anybody with access to the box.
I won't argue with you about just making it a service (since you already said you don't want to for whatever reason), but you can RUN it as a service:
http://www.tacktech.com/display.cfm?ttid=197[^]
|
|
|
|
|
Thanks!
I can create a service in visual studios also, but unfortunately that isn't optimal in this situation.
I have domain admin rights, I'd just like to be able to catch the log off event, cancel it and query AD, send them a pop up and say "Hello [ ], please don't kick me off, as I'm running [ ]"
But it appears that I'm the only one that has tried this
|
|
|
|
|
One other idea I had that may or may not work is if you trap the WM_QUERYENDSESSION window message. I know it works to block a local logoff / shutdown, but not sure if it will work remotely. Give it a whirl, might be what you are looking for.
|
|
|
|
|
I will try that, thank you!
|
|
|
|
|
Not sure if server 2008 supports this as it was added in Vista, but there is also the ShutdownBlockReasonCreate API that goes along with that windows message.
|
|
|
|
|
If you have long running processes, then perhaps they shouldn't be running under your personal login credentials. You should perhaps install them as services using a service account for credentials.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
Hi,
Thanks for the reply. That'd be great, but they are not programs I wrote and have to use human interaction, so I have to have them run under a logged in session.
|
|
|
|
|
If it requires human interaction and such, then why is it being run on the server? Why can it not be run from your local computer? You have the credentials, so it shouldn't be access to the server for data that is an issue.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
Thanks for the reply, there is no trust between the domains.
If there are any more questions about why it can't be done a different way, I will answer them all with one answer and say that this is the way I would prefer to do it, so the thread isn't derailed.
There has to be a way to prevent this, has anyone ever written code to do that?
|
|
|
|
|
There is no system event for this, as you call it.
There is also no way for you to prevent being kicked off. If another admin wants to boot you off, there's nothing you can do to stop it.
The only solution I can come up with to your problem is to build, in the other domain, a virtual server dedicated to you so nobody will touch it.
|
|
|
|
|
Thanks Dave
You are right, I may have to move this from integration to my own private lab
|
|
|
|
|
Restating the problem since I got confused.
You have an APP - call it A.
You want to run A on box Z and it takes a while. So while it is running you are not paying attention to Z.
Then another user comes along and logs into Z, which terminates your user session and terminates A.
So possible solutions.
1. Pretty sure another log in will already tell you that someone else is there. So you want an additional message to pop. And I am pretty sure that to have that pop during log in is going to require some very specific internal windows code. Not just a random app. And in terms of complexity and intrusiveness (including security) it is much higher than a windows service.
2. Create a windows service to run it - specific to the App.
3. Use the windows scheduler to run it.
4. Create a generic windows service, basically like 3, that allows you to run a task (like scheduler). More code than 2/3, but less complex to use.
5. Send an email telling people not to log in to the box.
For items 2/3/4 there is complexity in dealing with user input. For console IO you can use IO redirects. Either via cmd or via Process class. For a GUI it is certain to be more complicated since I would suspect you would need to intercept everything. Certainly something is possible since "Remote Desktop Connection" works.
turbosupramk3 wrote: I'm in a large organization,
Why not just have a virtual box and it is 'yours' so no one just randomly logs in?
|
|
|
|
|
I use a web based look-up service to obtain detailed information on IP addresses. It works great until the service goes down and the URL fails to render proper XML.
The error (when the service is down) occurs on the "xDoc = XDocument.Load(url)" statement but does NOT throw an XmlException that I can catch...instead the server (I use a host) locks up with an internal (500) error. Since this error is from the server and not my application, I get no stack trace.
All of my XML validation methods are predicated on the fact that I have the XDocument loaded first....then validate against an XML schema. But it's the load that fails so I have no chance to validate the XML. Any Ideas?
string url = String.Format("http://www.ipgp.net/api/xml/{0}/{1}", sourceIP, password);
try
{
xDoc = XDocument.Load(url);
}
catch (XmlException ex)
{
xDoc = XDocument.Load(safe);
}
UPDATE:
I figured out this UGLY hack to get around the problem for now. The following code first reads the webpage into a variable and then checks the variable for an XML tag that I know should be present. If XML tag can't be found then my default (safe) xml loads. I hope someone can PLEASE give me a better fix...thanks
HttpWebRequest myRequest =(HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();
if (ExactMatch(result, "<Country>"))
xDoc = XDocument.Load(url);
else
xDoc = XDocument.Load(Safe);
modified 21-Dec-11 18:13pm.
|
|
|
|
|
To see what is going on, you could just load the document from the url into a string first so that you can see if it is an issue with the request or response first. Once you have the string you just need to parse it into your XmlDocument. It adds a line of code, but it makes debugging and viewing your variables much easier.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
That is what my "Ugly Hack" that I posted does. Using 7 lines of code, it reads the XML into a string and looks at that string before deciding if the XML is to be loaded. Just seems like a terrible waste of time/resources. I don't understand why it doesn't simple kick out an XmlException as the documentation says it should. The server 500 error gets me every time.
Thanks for responding.
|
|
|
|
|
My hunch is that the error isn't coming from your own code. Are you running this code in a web application? If so, then maybe, but if your application isn't a web application then the likely source of the 500 error is the site you are trying to hit. If the source site is working properly when you enter your full url into a browser, then you may have an issue with how your url is constructed as well.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
Yes, my site is an asp.net web application. The error occurs anytime I try to load something using XDocument.load() that isn't in proper XML format. Wrapping it in a try block like I show above does no good. You can't validate the XML against an XML schema util you have it loaded...kind of a catch 22 in my case. I don't like the idea that XDocument(url) can stop my web-application from functioning (internal 500 error). The error does not come from my web-app code, it comes from the server running my web-application anytime I try to load fouled-up XML.
My hack has it working for now but I am certain that I am overlooking something simple. I guess if there were a simple fix, someone would have posted it by now.
Thanks again,
modified 21-Dec-11 18:20pm.
|
|
|
|
|
Enochs wrote: catch (XmlException ex)
What makes you think that that is the only possible exception that can be thrown? If another exception is thrown then it is going to result in some error response to the client (which is what you are seeing.)
Also maybe your url in the catch is failing.
Also shouldn't you log something if it fails?
modified 23-Dec-11 15:55pm.
|
|
|
|
|
Hello Everyone,
Actually I am facing one problem, please help me...
How to create schema in ms-access database using C# code?
Thanks in advance!!
|
|
|
|
|
Your question isn't very clear to me, however this[^] could be the answer.
|
|
|
|
|
Actually I want to create ms-access database with some schema name with the help of c# code.
|
|
|
|
|
Sorry, can't help you there; I have been using both Access and SQLServer, but always migrating away from Access, never creating one.
|
|
|
|