如何为msix打包的winui3项目创建桌面快捷方式

问题描述 投票:0回答:1

也就是说,用户安装msix后,应该有快捷方式。或者至少,应用程序在首次启动后创建快捷方式。不是一些安装后脚本。

我尝试了desktop7:快捷方式,但没有出现快捷方式。

windows winui-3 desktop-bridge
1个回答
0
投票

首先,如果您使用MSIX打包WinUI3应用程序,则无法从exe启动您的程序。这是预期的行为。

如果您需要在桌面上创建快捷方式,首先您需要使您的应用程序成为非打包(unpackaged)和自包含),您需要修改您的csproj文件。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <WindowsPackageType>None</WindowsPackageType>
    <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
  </PropertyGroup>

    <Target Name="RemoveFoldersWithMuiFiles" AfterTargets="Build">
        <ItemGroup>
            <RemovingFiles Include="$(OutDir)*\*.mui" Exclude="$(OutDir)en-us\*.mui" />
            <RemovingFolders Include="@(RemovingFiles->'%(RootDir)%(Directory)')" />
        </ItemGroup>
        <RemoveDir Directories="@(RemovingFolders)" />
    </Target>

然后您可以尝试使用 Windows 脚本宿主创建桌面快捷方式

项目 > 添加引用 > COM > Windows 脚本宿主对象模型

using IWshRuntimeLibrary;

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool QueryFullProcessImageName(IntPtr hProcess, uint dwFlags,
                                                [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpExeName,
                                                ref uint lpdwSize);
private void CreateShortcut()
{
    // Get a handle to the current process
    IntPtr hProcess = Process.GetCurrentProcess().Handle;
    uint dwFlags = 0;
    StringBuilder lpExeName = new StringBuilder(260);
    uint lpdwSize = (uint)lpExeName.Capacity;
    //Get exe path
    bool result = QueryFullProcessImageName(hProcess, dwFlags, lpExeName, ref lpdwSize);

    object shDesktop = (object)"Desktop";
    WshShell shell = new WshShell();
    string shortcutAddress = (string)shell.SpecialFolders.Item(ref shDesktop) + @"\yourAppName.lnk";
    IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress);
    shortcut.Description = "New shortcut for a yourAppName";
    shortcut.Hotkey = "Ctrl+Shift+N";
    shortcut.TargetPath = lpExeName.ToString();
    shortcut.Save();
}
© www.soinside.com 2019 - 2024. All rights reserved.