User Profile
davidanthoff
Brass Contributor
Joined Jun 08, 2020
User Widgets
Recent Discussions
Re: Execution alias for hosted application
> You should trace the activity of the alias launch to see if that is the case. How can I do that? > If so, you probably want to try putting in a launcher exe application in the package to perform the hosted launch. That is unfortunately not an option: I am using the hosted apps because they can be unsigned, but only if they don't contain binaries...537Views0likes1CommentExecution alias for hosted application
I am trying to create a hosted application (i.e. with a HostId attribute) with an execution alias. The hosted application in general works, i.e. I can launch it from the start menu link that is generated. The execution alias is being generated, but when I try to run it I get an error saying PS> foobarasdf.exe ResourceUnavailable: Program 'foobarasdf.exe' failed to run: An error occurred trying to start process 'C:\Users\david\AppData\Local\Microsoft\WindowsApps\foobarasdf.exe' with working directory 'C:\Users\david\source\juliaup'. The file cann ot be accessed by the system.At line:1 char:1 + foobarasdf.exe + ~~~~~~~~~~~~~~. The app manifest that I'm using is this <?xml version="1.0" encoding="utf-8"?> <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5" xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap uap10 rescap build" xmlns:build="http://schemas.microsoft.com/developer/appx/2015/build"> <Identity Name="StringBuildersManifest" Publisher="CN=Julialang, OID.2.25.311729368913984317654407730594956997722=1" Version="1.0.0.6" /> <Properties> <DisplayName>Number Guesser (Manifest)</DisplayName> <PublisherDisplayName>AppModelSamples</PublisherDisplayName> <Logo>Images\StoreLogo.png</Logo> </Properties> <Dependencies> <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.19041.0" /> <uap10:HostRuntimeDependency Name="JuliaHubInc.JuliaDev" Publisher="CN="JuliaHub, Inc.", O="JuliaHub, Inc.", L=CAMBRIDGE, S=Massachusetts, C=US" MinVersion="1.0.0.0"/> </Dependencies> <Applications> <Application Id="StringBuildersApp" uap10:HostId="JuliaHost" uap10:Parameters="--project=C:\Users\david\.julia\dev\StringBuilders\app"> <uap:VisualElements DisplayName="Stringbuilders" Description="Stringbuilders is a high-level, high-performance, dynamic programming language" BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png"> <uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" ShortName="Julia" Square71x71Logo="Images\SmallTile.png" Square310x310Logo="Images\LargeTile.png"> <uap:ShowNameOnTiles> <uap:ShowOn Tile="square150x150Logo"/> <uap:ShowOn Tile="wide310x150Logo"/> <uap:ShowOn Tile="square310x310Logo"/> </uap:ShowNameOnTiles> </uap:DefaultTile > <uap:SplashScreen Image="Images\SplashScreen.png" /> </uap:VisualElements> <Extensions> <uap5:Extension Category="windows.appExecutionAlias"> <uap5:AppExecutionAlias> <uap5:ExecutionAlias Alias="foobarasdf.exe" /> </uap5:AppExecutionAlias> </uap5:Extension> </Extensions> </Application> </Applications> <Capabilities> <rescap:Capability Name="runFullTrust" /> <rescap:Capability Name="unvirtualizedResources"/> </Capabilities> </Package> Should this kind of approach in general work? Any hints what I'm doing wrong would be greatly appreciated!666Views0likes3CommentsRe: Flexible Virtualization
Actually, third question 🙂 Is this a feature that might be made available for older versions of Windows 10 as well? It is an App Installer feature, and you guys can update App Installer on older Windows versions, right? That would also help us, because we can't really use an installer that doesn't work on all supported Windows versions...1.6KViews1like0CommentsRe: Flexible Virtualization
jvintzel I would also be very interested in getting a bit more clarity on this. First, is there documentation and schema for this feature somewhere? And second, is this shipping today, or in some future version? That was not clear to me from the video. As background, I'm working on a MSIX installer for the Julia programming language, and one major issue at the moment is that we absolutely must integrate with the Jupyter Notebook ecosystem, and for that to work we need the ability to write to a specific file location in %APPDATA% from Julia that is visible to other software, i.e. outside of the container. So I'm actually interested in this for files, not for the registry. One follow up question on this: will this be supported in App Installer, or just in the Store? The one thing that is completely blocking the Julia installer from using App Installer is that I don't see any way around this file system virtualization for the Jupyter file location, if we had some way to get around that from App Installer, it would really unblock our scenario.1.5KViews1like1CommentRe: Windows 10 2004 - MSIX Not Updating -Please check whether the Msixvc support services are installed.
StephenWhiteD3G Yes, a system restart also solves this reliably for me. To me this just looks like a bug in AppInstaller. Would be great if someone from MS could confirm that and let us know about any plans to fix this and how such a fix might be distributed. As it stands right now, this bug essentially means we can't use AppInstaller at all, this seems a pretty critical bug in a very core code path?23KViews0likes3CommentsRe: Write to non virtualized %APPDATA% location from MSIX installed binary
Toastgun Thanks, interesting! I think for us then the question is whether we might get permission from MS for the store to have the unvirtualizedResources capability... Python has it, and Julia as a product seems to be in exactly the same category, so maybe there is hope? Has anyone had experience with store submissions that require that? Is there someone from MS who could work with us pre store submission on this, or is the right strategy to just submit to the store and hope for the best?2.1KViews0likes1CommentWrite to non virtualized %APPDATA% location from MSIX installed binary
Is there any way to write files to the "real" %APPDATA% location from a binary that is installed via an MSIX installer? I.e. I would like to write a file to such a location in such a way that it is visible to any other program that is installed on my system. The background for this is as follows: I'm trying to create an MSIX installer for the Julia programming language. One very, very key feature is integration with Jupyter clients. The way programming languages integrate with Jupyter clients is that the programming language should write some files into the folder %APPDATA%\jupyter\kernels, and then Jupyter clients read those files to integrate the programming language into their UI. You can read the spec for the Jupyter side of things at https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs. The problem I'm running into now is that my MSIX installed Julia version can try to write the necessary files into the %APPDATA%\jupyter\kernels folder, but any Jupyter clients won't see those files because in truth the files of course were not written to %APPDATA%\jupyter\kernels, but the virtualized location for Julia... Is there any way around this? What I really need is some way to say, from the Julia binary, "Hey, I need to write some files into the folder %APPDATA%\jupyter\kernels, the real one, not a virtualized one". Given how popular and central Jupyter is to the whole data science ecosystem, it would be really good if there was some way to solve this... If nothing else, maybe MS could add a hard exception to the folder `%APPDATA%\jupyter\kernels` to not virtualize that specific location ever, for any app?2.3KViews0likes3CommentsRe: Include version in filename generated by MakeAppx.exe when using packaging layout
Just to elaborate a bit more on this: I want to host an appinstaller file on the internet, say at https://www.mycompany.com/Foo.appinstaller. My impression is that this is the one file that I would overwrite whenever I publish a new version of the app, but that ideally all other files would get distinct filenames when I publish a new version of my app. Right now, MakeAppx.exe creates the following files for me: Foo.appxbundle, Foo-x64.appx and the corresponding other platforms. I then host all these files also at https://www.mycompany.com. But ideally, it seems to me, that these files would be named Foo_1.0.0.0.appxbundle, Foo-x64_1.0.0.0.appx etc, so that I don't need to overwrite the previous versions of these files when I publish a new release.653Views0likes0CommentsInclude version in filename generated by MakeAppx.exe when using packaging layout
I'm using a packaging layout file and MakeAppx to generate my appx and appxbundle files. That generally works ok, but one problem is that the files that are generated in that way don't include the version number in their filename. The Visual Studio Wap type automatically seems to generate output files that include the version in the filename, which seems safer so that one doesn't have to overwrite previous installer files. Is there a way to tell MakeAppx to generate output filenames that include the version in the filename when using the packaging layout option?744Views0likes1CommentRe: Windows 10 2004 - MSIX Not Updating -Please check whether the Msixvc support services are installed.
I'm also getting these kinds of errors. Specifically: App installation failed with error message: error 0xC00CEE23: The XML in the .appinstaller file is not valid: Line 26, Column 7, Reason: '>' expected. (0xc00cee23) I get this error an a system where I had a previous version of the appinstaller installed (but now uninstalled in the meantime). If I try exactly the same link on a fresh new system in a VM, it all works.23KViews0likes9CommentsRe: How to use AddOptionalPackageAsync?
Tanaka_Jimha Alright, I've got the github repo up now, it is here: https://github.com/davidanthoff/winjulia You won't be able to run the build steps because you also need various builds of Julia itself, and setting that up is complicated, but it should give you an idea of what scripts I'm using to build things. I'm also hosting the packages that I've created online now at https://winjulia.s3-us-west-1.amazonaws.com/index.html, so you and the dev team should be able to run the installer etc. on your own system and collect logs. Here are some random comments that maybe are helpful: The link "Install Julia" on that S3 website that I posted links to the appinstaller file. It will install the "Julia" package, and one of the optional packages, namely Julia-1.4.1. There are two other optional packages (Julia-1.4.0 and Julia-1.4.2), and the website has links to all three optional packages. Installing any of the three optional packages via the weblink from that S3 site works. What I want to do is install optional packages from in-app code, though. The specific code that I'm using for that is https://github.com/davidanthoff/winjulia/blob/4ac34b6d0f4a434ef1902ecf24c17a8a3da65e64/launcher/main.cpp#L97, and that is also the part of the code that errors. If you install the main "Julia" app from the website that I linked to and run it, you will see an error message, and the code that I linked to in this item here is where that error occurs. Let me know if this helps or if you need any more information!4KViews0likes2CommentsRe: How to use AddOptionalPackageAsync?
davidanthoff Actually, I just realized that it will take a little longer until I can publish that GitHub repo: right now I have a codesigning cert that includes my private address, and I don't want to use that on the public internet. I'm working with my issuer right now to remove the address, as soon as I have that, I'll post it. But the issue I submitted on the feedback hub should include the necessary files.4.1KViews0likes4CommentsRe: How to use AddOptionalPackageAsync?
Tanaka_Jimha Thanks! I tried all your suggestions, but no luck so far. Here are some more details: I don't want to install all the optional dependencies at the same time when the main app is installed, so I don't think I should add all of them to the <OptionalPackages> element in the appinstaller file, right? I only want one of them installed with the main app, so I add that optional package to the <OptionalPackages> element, and then all the other optional packages I want to be able to install via an in-app option, so I add all of those packages to the <RelatedPackages> element in the appinstaller file. You can see the details of how I do this in the code that I posted with the original message. I think https://docs.microsoft.com/en-us/uwp/api/windows.management.deployment.packagemanager.addpackagebyappinstallerfileasync?view=winrt-19041 for the same reason is also not the right tool to implement my in-app feature add thing, right? As far as I can tell, it doesn't provide an option to install a specific optional package of the app, right? Or did I miss an option there somewhere? I did add <rescap:Capability Name="packageManagement" /> to my main app now, and it shows up in the UI when I install that, but it doesn't change the error message I get. When I install all the optional packages on my system, and then run the following ps code: > $x = Get-AppxPackage Julia* > $x.Dependencies I get this output: Name : Julia-1.4.1 Publisher : CN=Julialang Architecture : X64 ResourceId : Version : 1.0.0.0 PackageFullName : Julia-1.4.1_1.0.0.0_x64__87dh6scs60qg2 InstallLocation : C:\Program Files\WindowsApps\Julia-1.4.1_1.0.0.0_x64__87dh6scs60qg2 IsFramework : False PackageFamilyName : Julia-1.4.1_87dh6scs60qg2 PublisherId : 87dh6scs60qg2 IsResourcePackage : False IsBundle : False IsDevelopmentMode : False NonRemovable : False IsPartiallyStaged : False SignatureKind : Developer Status : Ok Name : Julia-1.4.2 Publisher : CN=Julialang Architecture : X64 ResourceId : Version : 1.0.0.0 PackageFullName : Julia-1.4.2_1.0.0.0_x64__87dh6scs60qg2 InstallLocation : C:\Program Files\WindowsApps\Julia-1.4.2_1.0.0.0_x64__87dh6scs60qg2 IsFramework : False PackageFamilyName : Julia-1.4.2_87dh6scs60qg2 PublisherId : 87dh6scs60qg2 IsResourcePackage : False IsBundle : False IsDevelopmentMode : False NonRemovable : False IsPartiallyStaged : False SignatureKind : Developer Status : Ok So from this I take it that I should use "Julia-1.4.2_87dh6scs60qg2" as the string that I pass to AddOptionalPackageAsync? I'm doing that now, but I still get the same error message "Access is denied". I do think everything is in one related set, I'm creating all the packages with a PackagingLayout.xml file that looks like this: <PackagingLayout xmlns="http://schemas.microsoft.com/appx/makeappx/2017"> <!-- Main game --> <PackageFamily ID="Julia" FlatBundle="true" ManifestPath="appxmanifest.xml" ResourceManager="false"> <!-- x64 code package--> <Package ID="Julia-x64" ProcessorArchitecture="x64"> <Files> <File DestinationPath="Julia\Julia.exe" SourcePath="C:\Users\david\source\repos\WinJulia\Release\Julia.exe"/> <File DestinationPath="Images\*.png" SourcePath="Images\*.png"/> </Files> </Package> </PackageFamily> <PackageFamily ID="Julia-1.4.2" Optional="true" ManifestPath="juliaversions\julia-1.4.2-appxmanifest.xml" ResourceManager="false"> <Package ID="Julia-1.4.2.x64" ProcessorArchitecture="x64"> <Files> <File DestinationPath="Julia\**" SourcePath="C:\Users\david\source\repos\WinJulia\optionalpackages\julia-1.4.2\Julia\**"/> <File DestinationPath="Images\*.png" SourcePath="Images\*.png"/> </Files> </Package> </PackageFamily> <PackageFamily ID="Julia-1.4.1" Optional="true" ManifestPath="juliaversions\julia-1.4.1-appxmanifest.xml" ResourceManager="false"> <Package ID="Julia-1.4.1.x64" ProcessorArchitecture="x64"> <Files> <File DestinationPath="Julia\**" SourcePath="C:\Users\david\source\repos\WinJulia\optionalpackages\julia-1.4.1\Julia\**"/> <File DestinationPath="Images\*.png" SourcePath="Images\*.png"/> </Files> </Package> </PackageFamily> <PackageFamily ID="Julia-1.4.0" Optional="true" ManifestPath="juliaversions\julia-1.4.0-appxmanifest.xml" ResourceManager="false"> <Package ID="Julia-1.4.0.x64" ProcessorArchitecture="x64"> <Files> <File DestinationPath="Julia\**" SourcePath="C:\Users\david\source\repos\WinJulia\optionalpackages\julia-1.4.0\Julia\**"/> <File DestinationPath="Images\*.png" SourcePath="Images\*.png"/> </Files> </Package> </PackageFamily> </PackagingLayout> And I believe that should create all packages as being in one related set, right?4.1KViews0likes7CommentsHow to use AddOptionalPackageAsync?
I'm trying to build a MSIX solution for the [Julia](https://julialang.org/) language, but I'm stuck in that I can't get AddOptionalPackageAsync to work. In general, I'm using a PackagingLayout.xml that creates a bunch of packages and upload them all to a S3 bucket. I then also upload an appinstaller file. Here is what works: I can install the main app from the appinstaller file, and it also successfully installs the optional packages that I specify as optional in the appinstaller file. What doesn't work is my attempt to install additional optional packages from code with a call to AddOptionalPackageAsync. The code that I'm using to call AddOptionalPackageAsync looks like this: auto packageToInstall = L"Julia-1.4.2"; auto res = catalog.AddOptionalPackageAsync(packageToInstall).get(); auto err = hresult_error(res.ExtendedError()); std::wcout << err.message().c_str() << std::endl; This produces an output of "Access is denied.". The content of the Julia.appinstaller is <?xml version="1.0" encoding="utf-8"?> <AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2017/2" Version="1.0.0.0" Uri="https://winjulia.s3-us-west-1.amazonaws.com/Julia.appinstaller" > <MainBundle Name="Julia" Publisher="CN=Julialang" Version="1.0.0.0" Uri="https://winjulia.s3-us-west-1.amazonaws.com/Julia.appxbundle" /> <OptionalPackages> <Bundle Name="Julia-1.4.1" Publisher="CN=Julialang" Version="1.0.0.0" Uri="https://winjulia.s3-us-west-1.amazonaws.com/Julia-1.4.1.appxbundle" /> </OptionalPackages> <RelatedPackages> <Bundle Name="Julia-1.4.2" Publisher="CN=Julialang" Version="1.0.0.0" Uri="https://winjulia.s3-us-west-1.amazonaws.com/Julia-1.4.2.appxbundle" /> </RelatedPackages> <UpdateSettings> <OnLaunch HoursBetweenUpdateChecks="0"/> </UpdateSettings> </AppInstaller> The package `Julia-1.4.1` (which specified as an <OptionalPackages> child) gets successfully installed with the main app, and if I swap things and put `Julia-1.4.2` into the <OptionalPackages> parent and `Julia-1.4.1` into the <RelatedPackages> element, then `Julia-1.4.2` gets installed correctly (but then I can't get AddOptionalPackageAsync to install Julia-1.4.1. I guess I'm passing the wrong string to AddOptionalPackageAsync, maybe? Also, is there an API that I can call from within my main package that would essentially give me the family package ID of all the packages that I have listed in the appinstaller either in the <OptionalPackages> or in the <RelatedPackages> element? Oh, and actually, I'm not even sure that putting things into the <RelatedPackages> parent is the correct move 🙂 Any help is much appreciated!4.5KViews0likes9Comments
Recent Blog Articles
No content to show