RunVirtual question RRS feed

  • Question

  • So let's say I have OUTLOOK.EXE runvirtual and Excel..exe is runvirtual as well both with different App-v packages, what happens if I receive an Excel attachment by mail and open it from within Outlook, in what runvirtual envrionment will Excel run, the one from Outlook, the one from excel, none, or will it just fail to launch?

    Thursday, September 8, 2016 12:11 PM

All replies

  • It will launch in the VE of Outlook, because it was open inside the virtualized Outlook. If there is a locally installed Excel, it will probably launch that one.

    If Excel is only available as another App-V Package it will most likely fail to launch because it can't find an File Type Association. You could create a Connection Group between the two Packages though.

    Simon Dettling | msitproblog.com | @SimonDettling

    Thursday, September 8, 2016 3:50 PM
  • Agree, why do you have separate connectiongroups/packages for the same office version? Most of the time addins are available in more than 1 office component. So it would be easier to just create 1 connectiongroup with all those addins (mark them as optional), and create a dummy/empty package as entry point. Configure runvirtual for both excel, and outlook to point to the dummy package.
    This way, as soon as outlook starts only 1 VE is available, the same one which excel will need.

    Roy Essers

    Friday, September 9, 2016 9:35 AM
  • Well we don't run an app-v publishing server and all packages are published globally, so then mark packages as optional is of no use am I right? (We use the connection group XML filles).

    So the reason for different connnection groups is that we have add-ins that are e.g. Outlook only, or Excel only so I don't see any reason why they should bite/interfere with each other.

    It's a never ending story this way because I was sequencing Java 1.8 for IE11 and then I have to add iexplore.exe to runvirtual as well under the same connection group as Outlook (e.g. for when they click an email link that leads to a java enabled website).

    So in the end I'm left with one huge connection group with maybe 20 add-ins? That seems unmanageable to me but perhaps I'm looking at it in the wrong way ;)


    Friday, September 9, 2016 9:52 AM
  • If you're running at least SP3, you can use the optional flag like:
    <?xml version="1.0" encoding="UTF-8"?>
    <appv:AppConnectionGroup xmlns="http://schemas.microsoft.com/appv/2014/virtualapplicationconnectiongroup" xmlns:appv="http://schemas.microsoft.com/appv/2014/virtualapplicationconnectiongroup" AppConnectionGroupId="715f39d8-1b48-4b9a-95e6-d33370564b33" VersionId="9cdf46f3-6716-43d3-b533-5c697878f51f" Priority="2" DisplayName="Test group">
    <appv:Package PackageId="2209cd3f-103c-4c5f-9b10-f91a17341f68" VersionId="adea06e5-360b-480b-8e50-cb0c862022d5" IsOptional="false" />
    <appv:Package PackageId="e2e96b73-2b17-447e-9f1c-2b02375b0b1b" VersionId="b3742e68-ec15-41c0-9b74-702da6957a97" IsOptional="false" />
    <appv:Package PackageId="f52cd5bc-0698-401b-abec-b2a227395748" VersionId="0dd640a0-8205-478e-b213-a3babf124ef1" IsOptional="true" />

    Roy Essers

    Friday, September 9, 2016 12:09 PM
  • We run 5.1 HF4. I'm aware of the optional flag but what does that mean? Let's say I have 4 Outlook Add-ins and the user only needs one. Will that one not interfere with the other 3 if I set the optional flag? Same as when the user needs 2 then the other 2 are not accessed even when published globally?

    Friday, September 9, 2016 12:16 PM
  • The connection group is a totally separate entity then the packages itself.  The optional flag just determines the ruleset for how / if the CG will be created, nothing to do with packages being added or published. 

    What I mean is if a user has all 4 packages published, and the CG has all 4 set to optional (the mandatory one is a 5th dummy package) they would end up with a CG with all 4.
    If they have only 2 of the 4, they will end up with a CG with just 2 of them.

    In your question, if the user only needs 1 outlook plugin, you just wouldn't publish the package to that user/machine.  The beauty of the CG with the optional flag is your CG doesn't have to change at all. 

    If you KNOW what packages will be on the machine, then yes you could create a CG with no optionals and get away with it.  But honestly its almost 0 value to you to be that rigid.
    Hopefully I'm answering your question helpfully. 

    I would strongly suggest to not use RV without CGs.  Its going to blow up on you sooner or later.  Even if technically everything works but you just made a user lose all app customizations because you switch to CGs down the road (the COW stuff is stored to the package GUID or the CG GUID)....just don't do it.  If you only have 1 package you want to be running with RV, create a dummy package, make that the optional in the CG and roll them out together.

    Friday, September 9, 2016 5:45 PM
  • Thanks guys for all the response I really appreciate it. I understand all the input but let me explain the environment we're running though that will clear things up. We run Citrix XenApp 7.9 servers with 20 - 30 users per server. All packages are published globally because of performance reasons. We don't use an App-V publishing server or the XenApp App-v integration to publish packages.

    So we have several locations that all use different Outlook add-ins for their telephony software as well as some Excel, Outlook and Powerpoint add-ins which are installed locally and use RunVirtual. The HKCU\Software\Microsoft\Office (and other Office keys) are in virtual passthrough so they are native to the system.

    We now have one connection group with 5 addins + 1 dummy package which is specified in the RunVirtual registry. Currently the optional flag is not selected. 

    So all these users work on the same system, but not every user needs all 5 add-ins. some only need one, some don't need anything. So without the optional flag, Outlook still runs virtual for everyone (because it's in HKLM) and all packages are accessible by everyone, except we don't create the add-in registry key for the people not needing the add-in.

    So if I set the optional flag to all packages, user A that only uses Addon A will still load addon B, C, D, E + the dummy package, so the entire connection group, right? Or does optional mean that App-V is so smart to not load the packages because it's not accessed by the user?

    And this configuration, would you think this is a good approach or would you do it in some other way? So right now I understand I should only use one CG for each Citrix server (multiple CGs with runvirtual already blew up in my face lol so I got that).

    The issue I have now is that this one CG keeps growing and growing, until maybe 10 packages are in it, which is really hard to manage. If you sequence one package wrong it could break everything.

    Or would you drop this entire thing and just publish to the user and not globally?

    Hope I'm making more sense now, thanks again!

    Monday, September 12, 2016 7:37 AM
  • What's the performance issue? SP2 brought lots of improvements for publishing performance. What takes so long? Adding the packages or publishing the packages (maybe it's just 1 package holding up the other onces)? How are your packages configured during sequencing? Do they all have Featureblocks or are you using fault streaming (which is by default best practice).
    To improve performance, you could add all those packages at boot-time (or even put them in the golden image). As you are using VDI/PVS you can also consider using shared content store mode (smb3 is advised).
    To improve publishing time, you could add VC redist packages to the golden image, use fault streaming, and disable unneeded virtual components).
    If you add the packages first, you can always publish to users. I only publish to machines, if all users are going to use the package (for instance adobe reader), or if the application has specific components which do not work with user publishing). You can always mix user and machine packages in connection groups if you're at least using SP3.

    Runvirtual does only work for 1 package. If that package is part of a connection group, all packages of that group are loaded. So yes, if you configure multiple connectiongroups for the same exe, will blow up.
    It's also true that all packages from the same connection group need the same COM settings. So testing is advised.

    At the moment I'm using a mix of almost 50 addins for office, all in 1 connectiongroup. All those packages are optional ofc. In reality a user will have about max. 5 different addins loaded (but all from the same group :P).
    The most optimal setting for us was to use com mode integrated, OOP true, other one false. Objects enabled.
    If you've got a package which does not work with this setting, you have to deploy it natively, or as a separate package (I think appvve-switch will win from runvirtual, but I'm not 100% sure).


    1) fix the performance issue
    2) use user based packages
    3) dummy package for runvirtual
    4) 1 connectiongroup.

    If anyone else has better advice, please share, this is always a nice discussion :)

    Roy Essers

    • Edited by Roy Essers Wednesday, September 14, 2016 12:39 PM
    Wednesday, September 14, 2016 12:37 PM
  • I read all the time that one package needs to be a NON-OPTIONAL package.

    Se when I have:

    - runcirtual package
    - excel addon 1
    - excel addon 2
    - excel addon 3

    I then should made all addon package OPTIONAL and only runvirtual packahe NON-OPTIONAL ?

    I tried and it seems not to work.....did i do something wrong or should I add another additional dummy addon package and make that one NON-OPTIONAL ? 

    Monday, March 30, 2020 6:58 AM
  • Although this is an old topic, not a lot has changed since then. It's still a requirement to have at least 1 mandatory package if you want to make use of connection groups. It's best practice to create a dummy package which sets the runvirtual key(s), put this package one place 1 of the connectiongroup and make it mandatory (do not check the optional flag). It's also a good idea to check the 'Use Any Version' checkbox... so you don't need to edit your connectiongroup each time you add a new version of an add-in.
    The last thing to make sure of, is to set the same COM-settings for all your packages, otherwise the connectiongroup will not be created (an event will show up in the app-v event logs telling you about it). I set all to integrated.
    Don't mix user -and machine based packages/connectiongroups. If you deploy machine based, set the RunVirtual under HKLM, if you deploy userbased set the RunVirtual under HKCU.

    The question is, why does it not work in your case. If you run excel, does the connectiongroup gets loaded? If you don't configure runvirtual, does a seperate add-in package work in Excel?

    Use the following powershell script to determine if the connectiongroup is created on your client, and all predefined packages are member:

    (Get-AppvClientConnectionGroup -Name 'Add-ins').GetPackages() | Select Name

    Start Excel and, use the following powershell script to determine of all packages are virtualy loaded and running in the same Virtual Environment:

    Get-AppvVirtualProcess -Name 'Excel' -ea SilentlyContinue | select @{n="EnvId";e={($_.AppvPackageData).VirtualEnvironmentId}},
        @{n="InUse";e={(Get-AppvClientPackage -Name $(($_.AppvPackageData).PackageName)).InUseByCurrentUser}}
    If you are using Office365, make sure the following regkey is created (although it should be created automatically on win10 1703 and later).

    AllowJitvInAppvVirtualizedProcess=1 (dword)

    Roy Essers

    • Edited by Roy Essers Sunday, April 5, 2020 11:02 AM
    • Proposed as answer by pollewops Tuesday, April 7, 2020 7:10 AM
    Sunday, April 5, 2020 11:00 AM
  • Roy thanks for your explanation....very useful!
    Tuesday, April 7, 2020 7:11 AM