icg has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, I've a script which makes use of Win32 API's LogonUser() and ImpersonateLoggedOnUser(). This script makes use of Win32::API::Prototype, which works fine on my PC. The script will be deployed to various systems having standarad installation of Perl. I'm finding it difficult to install the Win32::API module on such machines (as they need nmake.exe, cl.exe, etc.). Is there a way to call those API's without using Win32::API and/or is there a way to bundle the module with the source code? Thanks, Gowtham

Replies are listed 'Best First'.
Re: Win32 API question
by GrandFather (Saint) on Jun 20, 2006 at 04:48 UTC

    You can probably use PAR (mentioned here) to package up you Perl script and the modules that it needs.

    There are other packaging options and links to more background in the node Re: perl exe execution.


    DWIM is Perl's answer to Gödel
Re: Win32 API question
by jdtoronto (Prior) on Jun 20, 2006 at 05:34 UTC
    I use the ActiveState PDK utility PerlApp to create exe's that include the Win32::API modules. I deploy on around 1600 machines routinely with no need for a Perl install and no issues in the deployment.

    I believe that Win32::API is installed by default with ActiveStates Perl build. SOunds like you are doing something the hard way here.

    jdtoronto

Re: Win32 API question
by syphilis (Archbishop) on Jun 20, 2006 at 09:44 UTC
    One solution would be to install Win32::API on the other boxes using ppm (assuming those other machines are Win32 machines).

    If those other machines are not Win32, then Win32::API aint gunna work no matter what you do.

    Cheers,
    Rob
Re: Win32 API question
by BrowserUk (Patriarch) on Jun 20, 2006 at 10:03 UTC

    As mentioned above, if you are using Active State perl on these machines, then Win32::API should already be installed on them. If you are using one of the other flavours, then it may not be.

    If all the machines are running the same (major) version of perl (5.6.* or 5.8.*), then you need only compile modules once. They can then just be copied to the appropriate places on the target machine.

    It's easy to zip up the required files on the build machine (that is running the same version of perl as the target machines), and unzip them directly into the appropriate places on the target machines. It avoids all the dependancies (nmake gzip etc.), and the 3-way duplication of files that the standard build/install mechanisms impose. The downside is you would need to write and test the scripts/procedures for doing this yourself.

    PAR effectively does this for you, though you pay the small price of the 'install' (unzipping) being done each time the program is run, rather than just once if you do it manually.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      if you are using Active State perl on these machines, then Win32::API should already be installed on them.

      (Very) minor quibble - ActiveState perl does not come with Win32::API ... ummm ... or do I mean the converse ... :-)
      E:\>perl -e "print $ActivePerl::VERSION" 817 E:\>perl -MWin32::API -e "print $Win32::API::VERSION" Can't locate Win32/API.pm in @INC (@INC contains: E:/Perl817/lib E:/Pe +rl817/site /lib .). BEGIN failed--compilation aborted.
      Cheers,
      Rob
Re: Win32 API question
by madtoperl (Hermit) on Jun 20, 2006 at 04:40 UTC
    Hi icg,

    Why can't you convert the script to exe file and put it in another machine.If you convert the script to exe then it wont expect any supporting modules in the other systems....

    Hope it might be useful for your problem.....

    Thanks and Regards,

    madtoperl.
      Hi, Thanks for your help. Converting into an exe was one of the options. But I knew only about perl2exe which requires license, etc. Now, I came to know of PAR package. Thanks, Gowtham