|
Hi,
Perfect application if I can get the client side to show is own desktop rather than the servers, any ideas where i am going wrong.
|
|
|
|
|
In the installation folder on the client there is a file called windowclipper.pdf. Have a look at that to see how to install and run.
The installer should have done this, but check this registry value is set on the client:
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\AddIns\TSWindowClipper
"Name" = "TSWindowClipper.dll"
and that the TSWindowClipper.dll file exists in %WINDOWS%\System32.
Cheers
Martin.
|
|
|
|
|
Hi, incredible piece of software, great idea. What I would like to do is make the user unaware they are connecting over TSC, is there a way to hide the window initially during the logon and show it only after the remote app is launched? Also, hide the window immediately after the remote app has terminated? This would be awesome.
Robert
|
|
|
|
|
Hello!
I used to have it working like that (there is a flag in clipper.h called ALWAYS__CLIP that will turn this on). I have just tried to recompile with that set but it does not seem to work anymore (the remote desktop client just hangs . Not sure why.
It is probably not a good idea to hide the logon though, as you won't be able to tell what is happening. You can't assume a logon will succeed. If for some reason the user cannot be logged on (ie: password expired, too many users connected, password incorrect etc.) and the clipping makes the window hidden until the remote application starts, there will be a message box on the server waiting for user input. However the user won't be able to do anything about it since it is hidden!
If the login/logout process were hidden, it would have to deal with this scenario. A solution would be to timeout after a certain amount of time and terminate the client or perhaps inform the user that the application hasn't started yet and turn off the clipping in case there is a message being displayed on the server, this would then allow the user to deal with it.
Cheers.
Martin.
|
|
|
|
|
Hi,
Thanks for the reply. Yes, I can see the problem with unsuccessful logins staying hidden, but as you said adding the timeout interval should take care of that. I will take a look at the code to see if I can figure it out, I was just hoping you already had it working. The applications I’m looking at running already have their own internal security and it would be a real nuisance for the users to have to enter the username and password twice.
Regards,
Robert
|
|
|
|
|
Do you know about the auto connect property in .rdp files?
http://dev.remotenetworktechnology.com/ts/rdpfile.htm
You could set up a .rdp file with the user's name and password without them having to enter it. Or you could setup the launching from a web page and pass the username/password in that way.
Regards,
Martin.
|
|
|
|
|
Thanks Martin, I did try using the .rdp files and it will work. It's just that I thought it would be much more elegant for the user to click on an icon (or link) and get the program they are trying to run instead of first seeing the MS logon/welcome window. Not having to enter their username/password twice is a definite plus and it makes it workable even if it’s not as pretty as I’d like it to be.
Regards,
Robert
|
|
|
|
|
Hi Robert,
Were you able to pass through the password for the RDP session? So the user doesn't need to logon in the TS session?
It is what I'm trying to do, so I'd really apreciate if you could tell me how to do this.
Thanks in advanced
Kepa Ayerbe.
|
|
|
|
|
I'm thinking that is incredible piece of software too, Like Robert, I would like to hide the logon window.I found that Martin has a very good arguments but it's still very important for me that the users has the impression and the feeling that theirs applications has working locally on their computers. If somebody find the solution for doing this, let me know quickly as possible please.
P.S.: Sorry for my english, i'm still trying to improve it!!!
psodracer@hotmail.com
|
|
|
|
|
Firstly, WOW! great work Martin!
I wondered if anyone had been able to get this to work using the RDP installed in Windows XP. If I launch clipper.exe once the session is running on the remote xp machine, it behaves as expected. If I use the sample RDP file with the distribution package, the remote XP machine doesn't run clipper.exe or the second application I have set to run on connection.
I have got this working perfectly on a Windows 2003 TS and am very impressed with the results, so this is a wish list not a complaint!;)
James
Smoke me a kipper, I'll be back for breakfast
-Ace Rimmer
|
|
|
|
|
Hi James,
Glad you like the application I have some ideas for improvements, but not had any time to code them yet!
Anyway, a few things to try:
1) Check you are not already logged on before connecting with RDP: Windows XP only allows 1 session at any time (including the console). When you connect using the remote desktop client, if someone is logged on at the console you will take over that session and not be given a new one (ie, you won't go through the login process so the applcation won't be started). Log out on the console before connecting via RDP.
2) See if you can specifiy another start application. Eg: on the remote desktop client, click on the progams tab, tick "start the following program on connection" and enter "notepad.exe". When you login, notepad should be the only application running in the session (check you aren't already logged on at the console). If that works, try again with "c:\tswinclipper\clipper.exe notepad.exe" as the start application.
3) Although not very likely, check there are no configuration or polices disabling application launch at logon. See:
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/ServerHelp/04430bc5-4e7e-45d9-85a9-d6b11bbb0945.mspx
If you are still having problems, let me know and I'll see if I can think of anything else!
All the best,
Martin.
|
|
|
|
|
Agreed; the Clipper is a very awesome tool! I, too, am trying to get it to run on a WinXP server. (Client is also WinXP) 'Not sure if I'm reading this incorrectly, but the following excerpt from Microsoft TechNet leads me to believe that it's impossible to get a program to auto-start upon login to a WinXP terminal server:
Some client option settings are not applied when a connection is made to the console session of a remote computer running Windows XP. For example, if the client has specified a program to start upon connection to a remote computer, that program does not start if the connection is made to the console session of the remote computer. Instead, the default desktop appears. If the connection is made to a session other than the console session, the specified program starts as expected. The console session is the only session available for Remote Desktop on Windows XP Professional, so the default desktop always appears when a connection is made, even if the client has specified a different program. [Source]
I hope I'm wrong... Thoughts?
|
|
|
|
|
Hi there,
No, all they are saying is that in windows XP professional or Home edition, you can only have session. Therefore if you are already logged on, trying to logon remotely will give you the existing session and will not log you on again. You will have to logoff from the console if you want to initiate a logon remotely.
Regards,
Martin.
|
|
|
|
|
Hi Martin:
Thanks for continuing to monitor these discussions!
Yes, whenever I log in remotely to my test WinXP machine and there's someone already logged in, I'm given a message to the effect of, "there is already someone logged in, would you like to take over their session? They will lose any unsaved work." This confirms the single-session nature of WinXP remote desktop connections; you always get the "console session" regardless of whether someone is already logged in and regardless of whether you are logging in remotely or physically at the workstation itself.
The very problem is that the only WinXP session you can get -is- a "console session"; it seems that the paramter for auto-starting an application will only work for non-console sessions.
If that makes sense... hehe!
|
|
|
|
|
Hi all ... we develop a XP RDP SERVER ... without XP limits ... read the new post i write...
Maybe we can do something very interesting.
Ing Gonzalo Araujo C
MCSE + MCSD + MCSA + MCT
Bogota, Colombia, South America
|
|
|
|
|
I downloaded this in hopes that it would work with Windows 2000 (SP4) but I get all sorts of "the procedure entry point..." errors.. even AFTER pulling some of the DLLs from Windows 2003 or XP boxes.
Any chance there's a way to make this work w/ 2000?
Thanks a ton!
-Craig
|
|
|
|
|
Hi there,
I have had it working on a 2000 machine before (client side). Never tried it on the server side, is this what you are trying to do?
I have tested with Win XP Home SP2 (client) to Win XP Pro (server) and win 2000 pro (client) to Win XP2003 (server).
If it is the server side causing the problem, you could try deleting the wtsapi32.dll DLL in the server's install directory. Prehaps the version I shipped is not compatible with windows 2000?
I can't really say why it doesn't work for you without more info.
Cheers,
Martin.
|
|
|
|
|
You're right. It's working with W2K as server side if I remove file wtsapi32.dll you provide with your setup.exe
|
|
|
|
|
Hi
I want to use the MsRDP control from VC windows application but i dont want the control to be visible i want to create control programmatically. I used CoCreateInstance all things goes right but it doesnot get the session created on server however when i put the MSRdp control on the dialog box and use the same code for its IDispatch there it get connected .... and session is also created on server
this is the code i used for it
IID IID_RDP =
{0x9059f30f,0x4eb1,0x4bd2,{0x9F ,0xDC,0x36, 0xF4,0x3a, 0x21,0x8F, 0x4A}};
void Connect()
{
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
DISPID dispid =0;
IDispatch* pDisp = NULL;
CString text;
GetDlgItemText(IDC_SERVER,text);
HRESULT hr;
hr = ::CoCreateInstance(IID_RDP,NULL,CLSCTX_SERVER ,IID_IDispatch,(void **)&pDisp);
pDisp->AddRef();
//Setting Username and server
SetProperty(pDisp,OLESTR("Server"),(OLECHAR *)text.AllocSysString());
GetDlgItemText(IDC_USER,text);
SetProperty(pDisp,OLESTR("UserName"),(OLECHAR *)text.AllocSysString());
SetProperty(pDisp,OLESTR("Domain"),(OLECHAR *)"");
//setting password
DISPPARAMS dispparams;
EXCEPINFO escep;
UINT uArgErr =0;
VARIANT Result;
::VariantInit(&Result);
Result.vt =VT_DISPATCH;
dispparams.cArgs = 0;
dispparams.rgvarg = NULL;
dispparams.cNamedArgs = 0;
dispparams.rgdispidNamedArgs = NULL;
OLECHAR *szMem=OLESTR("AdvancedSettings2");
hr = pDisp->GetIDsOfNames(IID_NULL,&szMem,1,::GetUserDefaultLCID(),&dispid);
hr =pDisp->Invoke(dispid,IID_NULL,::GetUserDefaultLCID(),
DISPATCH_PROPERTYGET,&dispparams,&Result,&escep,&uArgErr);
IDispatch *pAdvanced = 0;
pAdvanced = Result.pdispVal;
pAdvanced->AddRef();
GetDlgItemText(IDC_PASSWORD,text);
SetProperty(pAdvanced,OLESTR("ClearTextPassword"),(OLECHAR*)text.AllocSysString());
hr =pAdvanced->Invoke(0x68,IID_NULL,::GetUserDefaultLCID(),
DISPATCH_PROPERTYGET,&dispparams,&Result,&escep,&uArgErr);
BOOL value = Result.boolVal;
//setting startup app
szMem=OLESTR("SecuredSettings");
pDisp->GetIDsOfNames(IID_NULL,&szMem,1,::GetUserDefaultLCID(),&dispid);
hr =pDisp->Invoke(dispid,IID_NULL,::GetUserDefaultLCID(),
DISPATCH_PROPERTYGET,&dispparams,&Result,&escep,&uArgErr);
IDispatch *pSecured = Result.pdispVal;
pSecured->AddRef();
SetProperty(pSecured,OLESTR("StartProgram"),OLESTR("explorer.exe"));
//connecting to server
szMem=OLESTR("Connect");
pDisp->GetIDsOfNames(IID_NULL,&szMem,1,::GetUserDefaultLCID(),&dispid);
hr = pDisp->Invoke(dispid,IID_NULL,::GetUserDefaultLCID(),
DISPATCH_METHOD,&dispparams,&Result,&escep,&uArgErr);
pSecured->Release();
pAdvanced->Release();
pDisp->Release();
return;
}
HRESULT SetProperty(IDispatch* pDispatch, OLECHAR* name , OLECHAR* value)
{
HRESULT hr;
VARIANTARG varg;
::VariantInit(&varg);
OLECHAR* szMem = name;
varg.vt = VT_BSTR;
varg.bstrVal = value;
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispid;
DISPPARAMS dispparams;
dispparams.cArgs = 1;
dispparams.rgvarg = &varg;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;
EXCEPINFO escep;
UINT uArgErr =0;
hr = pDispatch->GetIDsOfNames(IID_NULL,&szMem,1,::GetUserDefaultLCID(),&dispid);
if(SUCCEEDED(hr))
hr =pDispatch->Invoke(dispid,IID_NULL,::GetUserDefaultLCID(),
DISPATCH_PROPERTYPUT,&dispparams,NULL,&escep,&uArgErr);
return hr;
}
|
|
|
|
|
5 pts here
|
|
|
|
|
When is maximize and minimize planned to be programmed? This util is excellent by the way! keep up the good work!!
|
|
|
|
|
Thanks, I'm glad you like the app. Unfortunately, I don't have time to do any more development on this at the moment (sorry!). That is one of the reasons I put it on code project, so that someone else might finish it for me
Regards,
Martin.
|
|
|
|
|
Is there any way to seamlessly provide the useraccount and password when the user executes the seamless window against an Windows 2003 terminal server?
/Olof
|
|
|
|
|
If you mean from the remote desktop client, you can store it in a RDP connection file (encrypted).
See: http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/mstsc_autologon.asp
If you want to do it via the web client you can specifiy it in the parameters, however that is not very secure as the password is in plaintext (you would have to manage very carefully how you delivered the page to the user if security was an issue).
In addition you can also start up the client from the command line or with vb scripts and specify the username and password then.
Regards,
Martin.
|
|
|
|
|
ok thanks! great software by the way!
|
|
|
|
|