How can i use labview.tl​b to control Labview from an external applicatio​n?

Hi,
I've been told by a labview engineer that i could use the file
labview.tlb located in the labview install folder to control labview
from an external application (in my case, a C# app). I'm using Labview
6.1 under Windows 2000. This article confirms that:
"ActiveX and LabVIEW"
http://zone.ni.com/devzone/conceptd.nsf/webmain/54​01BE584FBAEECE862567C2006D36C7?opendocument
But i've not been able to find out how to use this file to achieve
what i want. I just want to be able to open/close labview, open/close
a vi, start/stop a vi, hide/show a vi from a C# application. The above
web page talks about activex but i really don't see the realtion
between activex and that labview.tlb file.
Is there so
mebody around who knows how to use that file? Why does NI
tell us that it's possible to do what i want to do but doesn't explain
how (or hides this info very well)?
Thanks

Hi,
> Hi I am fighting a similar problem and so far I found this: Calling
> LabVIEW from C++ Using ActiveX
>
> http://sine.ni.com/apps/we/niepd_web_display.DISPL​AY_EPD4?>p_guid=B45EACE3E21356A4E034080020E74861&p​_node=DZ52051&p_submitted=N&p_rank=&p>_answer=&p_s​ource=External
Thanks for the link, i actually already found this link before. I've
found yesterday how to use Labview.tlb, just add it to the references
of the project, it was probably too easy for me at that time:-) But
now, i'm still stuck as there is no doc about using the interfaces and
classes of this activex to control labview.
The example given on your link is made is C++ and for some reasons,
the wrapper generated for Labview.tlb when i added it to my c# project
doesn't seem to expose the same
interfaces and classes as the one used
in the C++ example. I therefore can't use the C++ example in C#.
I've tried to do something like:
LabVIEW.ApplicationClass a = new LabVIEW.ApplicationClass();
Just this line causes labview to launch but then immediately throws an
exception: "Query interface for interface LabVIEW._IApplication
failed".
Does somebody knows how to use that control in C#/VB.NET ?

Similar Messages

  • How to insert delay without using loops, and how can I use variable to store data in labview

    Hi all,
    I am new to Labview and I realized that quite often I am in condition to require a delay beween two functions or elements.. how can we insert a delay in such cases?
    I know how to use delays in a loop. but don't know how to inser some time delay between two elements.
    I have one more question, I know its a bad practice to post 2 questions in 1 thread.
    How can I use a temporary variable to store data, So far I am storing it in an indicator by making it invisible in front panel and making local variable of that indicator, is it the right way to do it ?
    Thanks in advance.

    Generally, LV doesn't have variables in the same sense that most languages do. You can use indicators to perform the same function as variables, but as Adnan pointed out, you run the risk of having race condition and it creates data copies, which is a problem if you have a lot of data. In most cases, you should use wires to perform the function of variables, which is to store data and make it available to the different functions in your code. Instead of thinking about variables, you need to think about data (something like "I have the data coming out of this function. Where does it need to go?").
    Try to take over the world!

  • How Can I use a Variable  in Data Controls query. Frank Kindly check...

    Hii,
    I am using JDeveloper 11g ADF BC.
    My Requirement is that I hv a login screen which is taken from [http://blogs.oracle.com/shay/simpleJSFDBlogin.zip].
    I hv attached BC in this application. I want to use the login usercode in the next pages after login screen. Next screen contains 3 list items which will be populating based on the user. So I created <af:selectOneChoice> using the BC( Just drag & dropped the column into the page from the data controls). But in the data control i want to use this usercode for passing the condition. Now Data is coming without any condition.
    So How can I use the usercode in the Data controls query.
    When I tried to display the usercode in the next page it is showing by binding the value. its code is follows
    <af:outputText value="#{backing_getUser.uid}"
    The program for checking the username & Password is follows.
    package login.backing;
    import oracle.adf.view.rich.component.rich.RichDocument;
    import oracle.adf.view.rich.component.rich.RichForm;
    import oracle.adf.view.rich.component.rich.input.RichInputText;
    import oracle.adf.view.rich.component.rich.layout.RichPanelFormLayout;
    import oracle.adf.view.rich.component.rich.nav.RichCommandButton;
    import java.sql.*;
    import java.util.List;
    import java.util.Map;
    import oracle.adf.view.rich.component.rich.output.RichMessage;
    import oracle.jdbc.OracleDriver;
    public class GetUser {
    private RichInputText uid;
    private RichInputText pid;
    private RichCommandButton commandButton1;
    private RichInputText inputText1;
    private RichInputText inputText2;
    public void setUid(RichInputText inputText1) {
    this.uid = inputText1;
    public void setPid(RichInputText inputText2) {
    this.pid = inputText2;
    public RichInputText getUid() {
    return uid;
    public RichInputText getPid() {
    return pid;
    public void setCommandButton1(RichCommandButton commandButton1) {
    this.commandButton1 = commandButton1;
    public RichCommandButton getCommandButton1() {
    return commandButton1;
    public String login_action() {
    // Add event code here...
    String user = this.getUid().getValue().toString();
    // String pass = inputText2.getValue().toString();
    String pid = this.getPid().getValue().toString();
    Connection conn;
    conn = getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery ("SELECT usercode FROM guser where usercode = '"+user.toUpperCase()+"' and pwd=F_TEST('"+pid.toUpperCase()+"')");
    if (rset.next()) {
    conn.close();
    return "good";
    conn.close();
    } catch (SQLException e) {
    System.out.println(e);
    return "bad";
    public static Connection getConnection() throws SQLException {
    String username = "ACCTS";
    String password = "ACCTS";
    String thinConn = "jdbc:oracle:thin:@SERVER1:1521:G5PS";
    DriverManager.registerDriver(new OracleDriver());
    Connection conn =
    DriverManager.getConnection(thinConn, username, password);
    conn.setAutoCommit(false);
    return conn;
    public void setInputText1(RichInputText inputText1) {
    this.inputText1 = inputText1;
    public RichInputText getInputText1() {
    return inputText1;
    public void setInputText2(RichInputText inputText2) {
    this.inputText2 = inputText2;
    public RichInputText getInputText2() {
    return inputText2;
    -----

    Hi,
    I didn't look at the example, but if you want to secure your application then you should use container managed security. Read this .
    Anyway, you could add this before return "good"; in your login_action()
    FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("username", user);Then, you can access this from anywhere in the application by using #{sessionScope.username}.
    Pedja

  • How can i use a song as a ring tone from a cd i have loaded on the 4s

    How can i use a song as a ringtone from  a cd i have loaded on my iphone 4s

    The weird thing is, when u make your own ringtones, they sound terrible when set as a ringtone (really tiny and generally awful), but when u set them as a text tone or any other alert they sound great (like they do when u play them through the music app).
    Is this just a bug with iOS5 or have previous models also done this?

  • How can I use my Keithley 2100 DMM with LabVIEW 7 Express?

    How can I communicate with Keithley 2100 digital multimeter using LabVIEW 7.0?

    Hi,
    There are a number of ways,
    1) Unfortunately the driver on the Keithley site is for labview version 8.0, so you could speak to keithley to see if they can provide a ver7.0 of the instrument driver
    2) You could use the version for the 2000 model from the NI website
    http://sine.ni.com/apps/utf8/niid_web_display.down​load_page?p_id_guid=E3B19B3E90B0659CE034080020E748​...
    There is a version 7.0 which you could modify to suit the 2100
    3) Use the VISA vi's and create your own driver using the user manual for the bus commands to driver the instrument.
    Hope this helps
    Regards
    Ray Farmer
    Regards
    Ray Farmer

  • How can I use a non-NI card in LabVIEW RT environment

    We built up a LabVIEW RT environment with LabVIEW 7.1 and relating drivers. There is a problem that we use some non-NI cards in this system and we did not know how to install the dll driver.
    Could you give me some ideals?
    Thanks a lot!!
    Regards,
    Yang Xin

    As it states in the LV RT User Manual - Appendix A (7.0) you might get more info on ni.com/info with info code RTDRVS.
    What kind of instrument/io-/bus-cards are you using?
    As I thought the VI calling the DLL would download the dll to the RT target automatically when run the VI. However, there are probably some restrictions (e.g. Call Library Nodes that access an operating system API other than Pharlap).
    In the 7.0 release notes it is mentioned: When building a start-up application that uses shared libraries (DLLs) with the LabVIEW Application Builder, LabVIEW opens the DLLs Used by Application dialog box and lists the DLLs used by the application. Some DLLs might report the following error:
    Target OS fails to load this DLL
    Ignore the warning and click th
    e OK button if you already transferred the DLL to the RT target. If you have not transferred the DLLs to the target, FTP the DLLs to the /ni-rt/system directory of the RT target.
    Note as well: Why Does My DLL Call Cause My LabVIEW Real-Time VI to Fail to Download?
    Let us know.
    Roland
    PS: These are links to start with.
    Developing a LabVIEW Real-Time Driver for a PXI or Compact PCI Device
    Configuring LabVIEW Real-Time and NI-VISA to Recognize a Third Party Device
    Using VISA to Write Drivers Supported in LabVIEW Real-Time for Thi
    rd Party PXI Cards.
    Programming for the LabVIEW Real-Time Module Using LabWindows/CVI

  • How can i use the ACL file to control the access from the other website?

    Hello all~
    My Sun one is 6.1 sp3 on Windows 2003 SE, and I am try to use the ACL file to control the access.
    My ACL file is below:
    version 3.0;
    acl "path=my_path_on_HD";
    deny absolute (all)
    (user = "anyone") and
    (dns = "*.my_site.com");
    deny absolute (all)
    (user = "anyone") and
    (dns = "*.other_site.net");
    Once I add the "deny", anyone include my site is decline for vist the path specify in the ACL file. But if remove the "deny", everyone include other one's website can access the file.
    Can anybody tell me how to make it work?

    I think you've misunderstood what the dns attribute is for. The dns attribute returns the hostname of the client accessing your website, not the hostname of the website that linked to your website.
    For example, when someone using the Comcast ISP goes to a malicious website at example.com that loads images from your website at www.amigoo.net, the dns attribute will be something like "c-1-2-3-4.ca.comcast.net", not "example.com". ACLs are used for authentication and authorization of clients (not the websites those clients chose to visit), and they don't provide the functionality you're looking for.
    If I understand correctly, you want to prevent websites other than amigoo.net from linking to files in your d:/webserver/imat/pics_upload directory. You can achieve this adding the following lines to your obj.conf configuration file:
    <Object ppath="d:/webserver/imat/pics_upload/*">
    <Client referer="*~*amigoo.net">
    PathCheck fn="deny-existence"
    </Client>
    </Object>

  • How can i use a string as a control for case structure?

    my vi is reading data. the output is a string,how can a string can control the case structure? because the there's a constructed vi in that case structure that wll perform a tast after the main vi read.
    Thank You
    (Can you please give me a simple example how can do this)

    Try this vi. You shouldn't have any problems just connecting a string to the case selector.
    BJD1613
    Lead Test Tools Development Engineer
    Philips Respironics
    Certified LV Architect / Instructor
    Attachments:
    string_to_control_case_structure.vi ‏10 KB

  • How can I restore my itunes on a new computer from an external hard drive without a back up?

    How can I restore my itunes on a new computer?
    I use an external hard drive to store all my information i.e. music / apps / movies but my current laptop has just blown up so now using a temp laptop.
    I am looking to try & restore my itunes & all of its information like my playlists / apps & everything else from the hard drive but it does not have a back up in the programmes to restore from that.
    Currently running Windows 7.
    All I want to do is have my itunes back without the pain of looking & reloading all my info which will take me an age.
    Any hints tips or advice that has worked for you would be greatly appreciated.

    Did you store the media library files on the external drive as well?
    If so press and hold down shift as you start iTunes, use the choose option, and connect to the iTunes Library.itl file on the external drive.
    If not you will need to start a new library and import the content into it. Do you have any devices that might hold ratings and playlists that could be recovered? If so see the second and third entries from the bottom of the table of recovery tools in Recover your iTunes library from your iPod or iOS device, and read the rest of it if you have any iOS devices.
    tt2

  • How can I use my time capsule to save files from my windows PC (Windows 8.1)?

    I have been to see the iStore close to where I live but I am frustrated to say that they are no help what so ever. The technical desk there freely admits that they do not how to do it and all they say is "apparently it is easy. Just follow the instructions on screen" which helps me no end!
    I have the Time Capsule set up on my mac and want to use part of the disc to save my files from my Windows PC (running Windows 8.1) that is on the same home network.
    I have found the apple forums so helpful in the past that I am pinning on my hopes on anyone that can help me via the forum now!

    Load the airport utility for windows. Sadly the most recent one is old.
    http://support.apple.com/kb/dl1547
    Although it is for windows 7 it does work on 8 and 8.1 .. tell us if you have problems loading it. Some people find it won't work without using safe mode.
    The utility will not help a lot to setup the latest model TC.. it is fine for Gen4 and earlier. But it does load bonjour for windows and a disk access agent.
    The TC should run simple names.. Short.. keep them below 10 characters if you can. No spaces and pure alphanumeric.
    That includes the base station name and wireless name.
    Once all of that is correct, open windows explorer and type in the address bar.
    \\TCname or \\TCipaddress where you replace TCname with the new short name or TCipaddress with obviously its actual IP.
    You will then get a request for username and password. Username is whatever.. admin will do. Password type in your disk access password.. public by default.
    TC is not designed to allow partitions so you cannot partition the TC disk. Create a folder and simply copy and paste your files to the folder.
    NOTE:: The TC cannot back itself up. So make sure you do not move files to the TC without having another copy.
    NOTE:: The TC does not happily mix TM backups and data.
    See http://pondini.org/TM/Home.html For info about TM and the TC.
    This area in particular.
    Q3 http://pondini.org/TM/Time_Capsule.html
    On mixing data and backups.

  • How can i use Kontrol Rig 3 to control pedals in Mainstage

    Hi, I have Guitar rig 4 and the Kontrol Rig 3 controller and they work great together.  however, i would like to use the Kontrol RIg as a midi controller for the amps and pedals in mainstage.  could someone please help me out here with how to make this happen.  Mainstage recognizes the Kontrol Rig but i can't seem to make it "learn" anything in the layout mode.  any help would be GREATLY appreciated!
    thanks,
    shane

    Hi
    Yes... absolutely:
    1st you need to download the Controller Editor from NI, then you need to configure the RK to work in "MIDI Mode". Assign the switches & pedal(s) to whatever CC's you wish.
    Then, in Mainstage, create the screen controls and MIDI Learn them.
    You may need the latest RK drivers too.
    HTH
    CCT

  • How can I use Automator or AppleScript to get text from a web page and paste it in execl?

    I don't know how to make scripts or complexed automator workflows... that's why I'm asking.
    I'm trying to make a simple app or script to ask me what text to extract from a web page, like name, address and phone number of a web page and paste each one of these data in the righ cell of excel.
    I was thinking to promt a request from automator or an applescript to ask me which text to extract from the page or to look throught the HTML of the page to search for specific html tags, from which extracting text and then importing it, or paste it to the specified execl cell. Name in the name cell, address in the address cell and so on.
    Can somebody help me to make this script?
    If you know an alternative, like a software that already do this or another language to use, please tell.

    Try holding down the alt key as you mark the text to be copied. You can then copy columns to table text.

  • How can I use Hash Table when processing the data from cdpos and cdhdr

    Hello Guru,
    I've a question,
    I need to reduce the access time to both cdhdr and cdpos.
    Because may be I'll get a huge number of entries.
    It looks like that by processing cdhdr and cdpos data will take many secondes,
    it depends on how many data you need to find.
    Hints : Putting instructions inside a form will slow down the program?
    Also, I just want use Hash table and I need to put a loop-instruction going on the hash-table in form.
    I know that it's no possible but I can declare an index inside my customized hash table.
    For example :
    DO
    READ TABLE FOR specific_hash_table WITH KEY TABLE oindex = d_oindex.
    Process data
    d_oindex += 1.
    UNTIL d_oindex = c_max_lines + 1.
    Doing this would actually not necessary improve the performance.
    Because It looks like I'm having a standard table, may be there's a hash function, but it could be a bad function.
    Also I need to use for example COUNT (*) to know how many lines I get with the select.
    FORM find_cdpos_data_with_loop
      TABLES
        i_otf_objcs TYPE STANDARD TABLE
      USING
        i_cdhdr_data TYPE HASHED TABLE
        i_objcl TYPE j_objnr
    *    i_obj_lst TYPE any
        i_option TYPE c
      CHANGING
        i_global TYPE STANDARD TABLE.
      " Hint: cdpos is a cluster-table
      CONSTANTS : objectid TYPE string VALUE 'objectid = i_obj_lst-objectid',
                  changenr TYPE string VALUE 'changenr = i_obj_lst-changenr',
                  tabname TYPE string VALUE 'tabname = i_otf_objcs-tablename',
                  tabnameo1 TYPE string VALUE 'tabname NE ''''',
                  tabnameo2 TYPE string VALUE 'tabname NE ''DRAD''',
                  fname TYPE string VALUE 'fname = i_otf_objcs-fieldname'.
      DATA : BEGIN OF i_object_list OCCURS 0,
                objectclas LIKE cdpos-objectclas,
                objectid LIKE cdpos-objectid,
                changenr LIKE cdpos-changenr,
             END OF i_object_list.
      DATA : i_cdpos LIKE TABLE OF i_object_list WITH HEADER LINE,
             i_obj_lst LIKE LINE OF i_cdpos.
      DATA : tabnamev2 TYPE string.
      IF i_option EQ 'X'.
        MOVE tabnameo2 TO tabnamev2.
      ELSE.
        MOVE tabnameo1 TO tabnamev2.
      ENDIF.
    *LOOP AT i_cdhdr_data TO i_obj_lst.
      SELECT objectclas objectid changenr
        INTO TABLE i_cdpos
        FROM cdpos
        FOR ALL ENTRIES IN i_otf_objcs
        WHERE objectclas = i_objcl AND
              (objectid) AND
              (changenr) AND
              (tabname) AND
              (tabnamev2) AND
              (fname).
      LOOP AT i_cdpos.
        APPEND i_cdpos-objectid TO i_global.
      ENDLOOP.
    *ENDLOOP.
    ENDFORM.                    "find_cdpos_data

    Hey Mart,
    This is what I met, unfortunately I get the same performance with for all entries.
    But with a lot of more code.
    FORM find_cdpos_data
      TABLES
        i_otf_objcs TYPE STANDARD TABLE
      USING
        i_objcl TYPE j_objnr
        i_obj_lst TYPE any
        i_option TYPE c
      CHANGING
        i_global TYPE STANDARD TABLE.
      " Hint: cdpos is a cluster-table
      CONSTANTS : objectid TYPE string VALUE 'objectid = i_obj_lst-objectid',
                  changenr TYPE string VALUE 'changenr = i_obj_lst-changenr',
                  tabname TYPE string VALUE 'tabname = i_otf_objcs-tablename',
                  tabnameo1 TYPE string VALUE 'tabname NE ''''',
                  tabnameo2 TYPE string VALUE 'tabname NE ''DRAD''',
                  fname TYPE string VALUE 'fname = i_otf_objcs-fieldname'.
    *  DATA : BEGIN OF i_object_list OCCURS 0,
    *            objectclas LIKE cdpos-objectclas,
    *            objectid LIKE cdpos-objectid,
    *            changenr LIKE cdpos-changenr,
    *         END OF i_object_list.
    ** complete modified code [begin]
      DATA : BEGIN OF i_object_list OCCURS 0,
                objectclas LIKE cdpos-objectclas,
                objectid LIKE cdpos-objectid,
                changenr LIKE cdpos-changenr,
                tabname LIKE cdpos-tabname,
                fname LIKE cdpos-fname,
             END OF i_object_list.
    ** complete modified code [end]
      DATA : i_cdpos LIKE TABLE OF i_object_list WITH HEADER LINE.
      DATA : tabnamev2 TYPE string.
    ** complete modified code [begin]
    FIELD-SYMBOLS : <otf> TYPE ANY,
                    <otf_field_tabname>,
                    <otf_field_fname>.
    ** complete modified code [end]
      IF i_option EQ 'X'.
        MOVE tabnameo2 TO tabnamev2.
      ELSE.
        MOVE tabnameo1 TO tabnamev2.
      ENDIF.
    **  SELECT objectclas objectid changenr
    **    INTO TABLE i_cdpos
    *  SELECT objectid
    *      APPENDING CORRESPONDING FIELDS OF TABLE i_global
    *      FROM cdpos
    *      FOR ALL ENTRIES IN i_otf_objcs
    *      WHERE objectclas = i_objcl AND
    *            (objectid) AND
    *            (changenr) AND
    *            (tabname) AND
    *            (tabnamev2) AND
    *            (fname).
    ** complete modified code [begin]
      SELECT objectid tabname fname
          INTO CORRESPONDING FIELDS OF TABLE i_cdpos
          FROM cdpos
          WHERE objectclas = i_objcl AND
                (objectid) AND
                (changenr) AND
                (tabnamev2).
    ASSIGN LOCAL COPY OF i_otf_objcs TO <otf>.
      LOOP AT i_cdpos.
      LOOP AT i_otf_objcs INTO <otf>.
       ASSIGN COMPONENT 'TABLENAME' OF STRUCTURE <otf> TO <otf_field_tabname>.
       ASSIGN COMPONENT 'FIELDNAME' OF STRUCTURE <otf> TO <otf_field_fname>.
        IF ( <otf_field_tabname>  EQ i_cdpos-tabname ) AND ( <otf_field_fname> EQ i_cdpos-fname ).
          APPEND i_cdpos-objectid TO i_global.
          RETURN.
        ENDIF.
      ENDLOOP.
      ENDLOOP.
    ** complete modified code [end]
    **  LOOP AT i_cdpos.
    **    APPEND i_cdpos-objectid TO i_global.
    **  ENDLOOP.
    ENDFORM.                    "find_cdpos_data

  • How can I use one motion controller to control two robotic independently?

    the help document says :
    Note  Configuring and clearing buffers is a processor-intensive operation on the motion controller that requires the allocation and deallocation of memory. You should configure and clear buffers only when motors are not moving and onboard programs are not running. For example, if you wish to execute three simultaneous contouring operations on axis 1, axis 2, and vector space 1 (with axes 3 and 4), you should first configure all three buffers before starting any of the operations. You can start the contour operations independently, and at different times, but should wait until all operations are complete before clearing any of the buffers.
    and i tried to conduct two contouring operation on two vector space. and tried to clear or configuring buffer for one vector when another one is still moving. so that i can start or end the movement at any time i want,and  it is ok.no error. but when i tried add a buffer  breakpoint output along with each vector movement. the bp doesn't work if the other vector is running . is there anyway to solve this problem.

    I think you've misunderstood what the dns attribute is for. The dns attribute returns the hostname of the client accessing your website, not the hostname of the website that linked to your website.
    For example, when someone using the Comcast ISP goes to a malicious website at example.com that loads images from your website at www.amigoo.net, the dns attribute will be something like "c-1-2-3-4.ca.comcast.net", not "example.com". ACLs are used for authentication and authorization of clients (not the websites those clients chose to visit), and they don't provide the functionality you're looking for.
    If I understand correctly, you want to prevent websites other than amigoo.net from linking to files in your d:/webserver/imat/pics_upload directory. You can achieve this adding the following lines to your obj.conf configuration file:
    <Object ppath="d:/webserver/imat/pics_upload/*">
    <Client referer="*~*amigoo.net">
    PathCheck fn="deny-existence"
    </Client>
    </Object>

  • How can I use an iPod nano to obtain music from iTunes without an email account?

    I recently gave my 9 year old grandson an iPod Nano for Xmas.  He does not have an email account and his parents don't want him to have one, which I think is a good idea.
    When I purchased the iPod the salesperson told me that it was possible to download music/set up an account, without a valid email account, but I don't remember the details.
    Some direction to address this issue would be great.

    If you are going to purchase music on a computer for him from the iTunes Store then it is necessary to set up an iTunes account which will require an email address. It does not have to be his, you can use the parents iTunes account if they have one.
    But you can use the Nano without music from the iTunes Store. Just rip music from CDs the parents own into iTunes and sync those to the Nano.
    Here is the manual for the Nano: http://manuals.info.apple.com/en_US/iPod_nano_6thgen_User_Guide.pdf

  • How can i use my pictures for Mission Control Spaces in Lion?

    How do I get a chosen selection of my own photos to be available for use as desktop pictures, with a different one for each Space in Mission Control in Lion?
    I have a new Macbook Air, Thunderbolt display and Lion.

    As long as your Office for Mac is 2011, you will have no problems using the programs.  If it is the Office for Mac 2008 version, there have been some mixed reviews.  2004 will not work at all.
    I have the 2011 version and have not had any problems since upgrading to Lion.

Maybe you are looking for