| Summary: | Failed to create Citrix Client v12 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] Platform | Reporter: | Gilles Darondeau <gdarondeau> | ||||||||
| Component: | SWT | Assignee: | Silenio Quarti <Silenio_Quarti> | ||||||||
| Status: | RESOLVED FIXED | QA Contact: | |||||||||
| Severity: | major | ||||||||||
| Priority: | P3 | CC: | eclipse.felipe, Silenio_Quarti | ||||||||
| Version: | 4.1 | Flags: | eclipse.felipe:
review+
|
||||||||
| Target Milestone: | 3.6.2 | ||||||||||
| Hardware: | PC | ||||||||||
| OS: | Windows XP | ||||||||||
| Whiteboard: | |||||||||||
| Attachments: |
|
||||||||||
|
Description
Gilles Darondeau
Becomming urgent...
This code is better but doesn't change the problem
public static void main(String[] args) {
try {
final Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(600, 400);
shell.setLayout(new FillLayout());
OleFrame oleFrame = new OleFrame(shell, SWT.NONE);
OleControlSite oleControlSite = new OleControlSite(
oleFrame,
SWT.NO_MERGE_PAINTS,
"{238F6F83-B8B4-11CF-8771-00A024541EE3}");
oleControlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
It looks like a bug on the Citrix client, but we should investigate to see if it is possible to workaround it. The problem is that we do not have access to a Citrix server. Is there a machine we can use? Also, please attach the crash log. I agree, it's probably a Citrix client bug but I imagine that a workaround is possible because the creation of this ole object works with a C++ sample. I tried to debug a little and I have been able to see that the failure comes from the OleControlSite constructor (line #140). The value returned by COM.OleCreate is not equal to COM.S_OK. The result is that an exception is caught on the oleControlSite = new OleControlSite() call. You should be able to reproduce without an access to a Citrix server. Thanks, Gilles Hi, did you have any chance to progress on this? Regards, Gilles silenio, did you ever get the chance to install the client ? (In reply to comment #5) > silenio, did you ever get the chance to install the client ? No. Gilles, the link for the download is broken. Please could you update it? Here is the link http://www.citrix.com/English/ss/downloads/results.asp?productID=186&c1=sot2755 and then please download online plugin 12.1 I downloaded the client and reproduced the problem. OleCreate() is returning 1 instead of S_OK. I am not sure what 1 means. GetLastError() has no further info. Gilles, could you attach your C++ sample? Created attachment 182471 [details]
Citrix Inc sample
attached...
(In reply to comment #9) > Created an attachment (id=182471) [details] > Citrix Inc sample > attached... I was search your sample looking for OleCreate and I found no hits. I scan over the code quickly I didn't find where the ole object was being created. Can you please point to us which file and method the Citrix client ole object is created in ? Thank you. This sample is done thanks to the visual C++ UI builder, so calls like OleCreate() are not directly visible. But I think that you could find it if you compile and run the sample. I am re-installing visual C++ and when I have more information I let you know. Thanks, Gilles I built the sample Citrix project and I checked that it runs with the client v12. Then I generate an output of the preprocessed C++ code but I didn't see a call to oleCreate(). It seems that visual C++ uses another way to load the activX. When I set breakpoints in OleControlSite class I can notice that there are more callbacks with client v12 than with older client. Did you notice the same behaviour ? Regards, Gilles (In reply to comment #12) > When I set breakpoints in OleControlSite class I can notice that there are more > callbacks with client v12 than with older client. > Did you notice the same behaviour ? No I did not. What callbacks did you see ? (In reply to comment #13) > (In reply to comment #12) > > When I set breakpoints in OleControlSite class I can notice that there are more > > callbacks with client v12 than with older client. > > Did you notice the same behaviour ? > No I did not. What callbacks did you see ? I was refering to the call sequence of COMObject.callback?() (where ? means '1' to '9') You should be able to notice that a couple of calls more with client v12. But unfortunately I ignore if it's a useful indication. Created attachment 182833 [details]
fix
Please try this patch out. Some how ICA Client 2.7 is failing when the OleClientSite object is passed to OleCreate(). This workaround stops passing a client site to OleCreate() for all versions of ICAClient. We need to see if it does not break older versions of the client.
I have been able to create an Ole Citrix client object with the patch for both a v12 and v11. I am going to test more to see how the patch behaves. This is an encouraging result but I wonder if there is a way to get this workaround without a swt .jar update. I seeked a way to integrate the fix in my code but like the exception is raised in the class constructor there is no workaround. I also tried to write my own version of the OleControlSite class in copying the original code but some calls refer to "package" method. So I think that the only solution is to make the fix in the SWT jar. I would like to test it from my product and with different version of the Citrix client. Could you please provide me a SWT jar file which would contain the fix ? Regards, Gilles Sure. Do want it based on which SWT version? HEAD? I am using a 3.6.0. Thanks Created attachment 183487 [details] swt plugin based on 3.6.x branch Here is the SWT plugin based on the 3.6.x branch. Note that I added a println to the patch to make sure the fix is running. If the fix is running you should see "BUG327560 isICAClient" in the console. Well done! I ran a complete suite of tests with several versions of the Citrix client (9.2, 10.2, 12.1). The patch fixes the bug for the version 12.1 and contains no regressions. I wondered about adding a statement for a specific component but I saw that it has already been necessary for some others dll. So if this fix suits you it's fine by me as well. Could you please add the fix in both 3.6 branch and HEAD ? Thanks a lot, Gilles Felipe, please review for 3.6.2 Fixed in R3_6_maintenance and HEAD. |