TWAIN Working Group

Newsletter Signup
Donate
Help keep TWAIN free
  • About TWAIN
    • What’s New?
    • News
    • Events
    • Membership
    • Consider a Donation
    • Contact Us
  • Why TWAIN?
  • Developers
    • Driver Developer
    • Application Developer
    • TWAIN Features
    • Specification & Tools
    • Self Certification Process
  • Support Forums
  • Scanner End-User
  • Find Certified Drivers
    • Facebook
    • LinkedIn
    • Vimeo

OpenDSM fails when run from Citrix client

Forums › TWAIN Classic › OpenDSM fails when run from Citrix client

  • This topic has 16 replies, 2 voices, and was last updated 1 month, 1 week ago by Bryansfl.
Viewing 15 posts - 1 through 15 (of 17 total)
1 2 →
  • Author
    Posts
  • July 24, 2008 at 2:33 pm #22367 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    Apologies if this has already been answered or is not been asked in a proper techinical manner.

    I have set up virtual machine as a Citrix server and put my application on it. I then set up a client pointing to the server from which I am running my application. I have no problems running the application in this manner (from the client) except that when I try to get a picture using a webcam, false is returned by CTwain::OpenSource.

    I traced this to the fact that in InitTwain() the line CallTwainProc(&m_AppId, NULL, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, (TW_MEMREF) &m_hMessageWnd); fails.

    The same CTwain code works when I am running the application in a Windows environment.

    As other CTwain functions like SelectSource work in the Citrix client server environment I have set up, I believe the issue is not one of my set up being incompatible with what I am trying to do.

    Has anyone had this type of issue or can anyone give me some advice as to what else I can look at or configure to stop MSG_OPENDSM failing?

    Thanks in advance for any help

    July 24, 2008 at 4:04 pm #24562 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    I did a “GetStatus” in CTwain::CallTwainProc after the mesage fails and I get a TWCC_SEQERROR.
    I guess my question is why what might cause that in a Citrix client server environment (with theserve being a virtual machine)w hen the same code doesn’t return an error running via winows.

    July 25, 2008 at 5:50 am #24563 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    typically when I’m running twain code in Citrix (or on a terminal server) the problem is in your profile’s windows directory. I would check if you loadlibrary call was successful, I imagine that either it failed or that you don’t have the .ds located under the user profile that you think you do.

    If this doesn’t make sense or if you’re still having trouble post back

    .

    July 25, 2008 at 11:05 am #24564 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    Thanks for your post gabe. To answer your question, loadlibrary is succesfull and I think the issue might be with the ds. I have also had a further read of ‘Twain’ to better understand how it works and it appears that the Data Source Manager is the cause of my present woes in the Citrix environment.

    In trying to locate the .ds as you kindly suggested in order to copy it/them on to the Citrix srever or client, I did a search on my laptop for various files (ds, dsm, twaindsm.dll) in my user profile (i.e. C:Documents and Settingstunji) but did not come up with anything.

    There are some twain dll files in C:Windows but I believe those have nothing to do with my user profile and also suspect they might not be
    the ones you meant. Those files also exist on both the Citrix server and client (under C:Windows) in any case.

    I believe if I can get the OPEN_DSM call to return true, I’ll have made enough progress by that stage to (hopefully) have enough knowledge of fixing any further issues with OPEN_DS.

    Are there any files relating to the Data Source Manager that I need on the Citrix Server or Client AND where might they be located on my laptop?

    July 25, 2008 at 11:10 am #24565 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    In your typical vanilla nonTS machine you have C:WINDOWStwain_32 and c:WINDOWStwain_32.dll
    Any/all .ds will live under C:WINDOWStwain_32
    copy C:WINDOWStwain_32 to the user’s profile’s windows dir

    .

    July 25, 2008 at 3:01 pm #24566 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    Gabe (and anyone else interested),
    The wiatwain.ds file was already in C:WindowsTwain and the user’s profile windows directory (in my case C:Documents and Settingstest1WINDOWS) on the Citrix machine.

    I then copied the 4 subdirectories from C:WindowsTwain. They are LogiVid, QuickCam, Sample and VM321) to the Citrix directories C:WindowsTwain and C:Documents and Settingstest1WINDOWS.

    I ran the application again and am still getting the same issue, is there anything I have missed out?

    July 25, 2008 at 5:37 pm #24567 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    unfortunate, that was the easy fix. Who’s CTwain are you using? And what device are you testing with?

    .

    July 28, 2008 at 9:06 am #24568 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    Morning gabe,

    I have a couple of devices. Sony Visual Communication Camera 1.0 AND Logitech Camera 1.3.

    I am not too sure what you mean by whose CTwain you are using. It appears to be a ‘standard’ CTWain file with a few modifications, none if which are in the region of the OPEN_DSM call. I am calling it a ‘standard ‘file because like other external files in the project, it doesn’t strictly conform to our coding standards.

    Come to think of it, the CTwain.cpp and h files I am looking at were incorporated into our projects circa 2003. Can anyone point me to an updated set of files (cpp, h and dll)?

    July 29, 2008 at 4:41 am #24569 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    ah, yes I wasn’t sure if you were using a third party library – as you say it’s a common name.
    the only update in terms of .h, .cpp, would be to just check that your twain header matches the current one from twain.org.

    I would test that code against a different driver. I use and recommend Kodak’s drivers for development. The i30 is a simple enough driver that does almost everything I need to test my code with. Almost any of the drivers you get from Kodak that have ‘i’ as the first letter and are followed by 2 digits (i30, i55) have done almost everything I expect. The main reason I use and recommend them is that outside of having what appears to be the strongest support for the twain specification they support a ‘simulation mode’ where you can run the driver without hardware connected. If you seach the forum you should be able to find a couple of posts where I describe settings up simulation mode – if you need help post back.

    Test you open call with the i30, post backwith your success|failure. I seem to remember testing Citrix and I if you have the drivers (the .ds) in the user’s profile that you code works on the desktop that you’ll be fine.

    Then I have a question, why twain in citrix? I know why I run twain in citrix but I’m curious why you are. Most solutions don’t need or want to scan from the server room – they want a device in the user’s hand. What is your target?

    .

    October 29, 2008 at 4:51 pm #24570 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    Apologies or the late reply Gabe. The application I am working on is an exectuable residing on the server and each client runs it in a citrix environment.

    Said application takes pictures or scans documents at some point and that is where I am encountering problems as doing either of those from the client returns the error I initially complained about.

    October 30, 2008 at 6:16 am #24571 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    I still suspect that the wrong twain32.dll is involved. My c++ projects have little trouble with citrix, but my .net apps have a little more trouble as I don’t control which dll gets loaded. The issues that exists with my native projects have come from someone installing a driver to the server (not their profile) or to their profile and not the server. For those people I have a .config file with a switch indicating whether to load the user profile twain32.dll or the system twain32.dll. You mentioned something about wiatwain – I would disable wia for the time being as I have found that it complicates an already messy environment.

    How are you determining the location of the twain32.dll?
    what programming language?

    .

    October 30, 2008 at 2:56 pm #24572 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    I am getting twain32.dll by using the LoadLibrary call and I am using C++.

    I downloaded the twain developers toolkit and I am having the same problems trying to acquire an image over a citrix network using the twack_32 application. The error I got was ‘Error in Open, LoadLibrary, or GetProcAddress.Twain DLL may not exist’. I then copied twain_32.dll to the directory twack_32 exists and still get the same error.

    My twain_32 dll is version 1.7.1.1.

    Just to clarify, I don’t have a problem with other parts of my application, it is the image capture functionality that is not working over a citrix network.

    October 30, 2008 at 2:58 pm #24573 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    more specifically, how do you get the path to the twain32.dll.

    .

    October 30, 2008 at 3:13 pm #24574 Reply
    tunji
    Participant
    • Topics - 3
    • Replies - 8
    • Total Posts - 11

    Gabe, I’m not sure if I fully understand your question but I just pass in the dll name to Loadlibrary like so –>

    strLibName = _T(“TWAIN_32.DLL”);
    hTwainDLL = LoadLibrary(strLibName);

    LoadLibrary then searches through a whole raft of folders, in a particular order, to find the dll as below:
    http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx

    October 30, 2008 at 3:24 pm #24575 Reply
    gabe
    Participant
    • Topics - 9
    • Replies - 583
    • Total Posts - 592

    yes and depending on whether you want the user’s profile or the system you should(could?) format the call with what is returned from GetWindowsDirectory or GetSystemWindowsDirectory.
    Just depends on where the drivers were installed. If the drivers were install while the system was in install mode then they should be in the system if the drivers were installed and the server wasn’t in install mode then they could have ended up under the user’s profile. It is somewhat common.

    http://msdn.microsoft.com/en-us/library/ms724403.aspx

    .

  • Author
    Posts
Viewing 15 posts - 1 through 15 (of 17 total)
1 2 →
Reply To: OpenDSM fails when run from Citrix client
Your information:




Quick Links

Service Providers
TWAIN Support Forums
Membership
Contact Us
Privacy Policy

Newsletter Signup

TWAIN Working Group Family

TWAIN Working Group
TWAIN Direct®
TWAIN Resources
TWAIN Certified Drivers
PDF/raster

  • Facebook
  • GitHub
  • LinkedIn
  • Vimeo

Recent Topics

  • TWAIN for dental imaging integration
  • PDF/R For who and where?
  • Making searchable PDF with PDF/R
  • Backward compatibility with PDF/A and traditional PDF
  • could not open the twain source. Make sure there is a valid source for your sca
  • Quarterly Newsletter
  • TWAIN Working Group Membership
  • Logo Usage
  • TWAIN License
  • Contact Us
Privacy Policy • Privacy Tools • Copyright © 2021 TWAIN Working Group • by iHwy, LLC • Log in

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.