UWP发布构建崩溃但不在Visual Studio中

时间:2016-03-11 02:55:43

标签: c# visual-studio debugging win-universal-app

从VS 2015(Windows 10)部署应用程序时,该应用程序运行正常 但是当我从" Store>创建构建时,故事就大不相同了。创建应用程序包...",然后从powershell脚本安装应用程序中的应用程序。

我已将问题隔离到我为锁定屏幕设置图像的部分。每当我在消息对话框中单击是以更改锁定屏幕时我都会崩溃,我已经附加了调试器,我只得到以下异常:

Exception thrown at 0x00007FFA61091F08 (KernelBase.dll) in 
ApplicationFrameHost.exe: 0x80010012: 
The callee (server [not server application]) is not available 
and disappeared; all connections are invalid. The call did not execute.

重现错误的代码基于以下文章:

https://msdn.microsoft.com/en-us/windows.system.userprofile.userprofilepersonalizationsettings.trysetlockscreenimageasync

    public async Task<bool> ChangeLockScreenBackground()
    {
        bool success = false;
        if (UserProfilePersonalizationSettings.IsSupported())
        {
            var uri = new Uri("ms-appx:///Assets/SplashScreen.scale-400.png");
            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri);
            UserProfilePersonalizationSettings profileSettings = UserProfilePersonalizationSettings.Current;
            success = await profileSettings.TrySetLockScreenImageAsync(file);
        }
        return success;


    }

我不知道发生了什么,我认为这是应用程序的功能。 但是我启用了用户帐户信息和图片库,但仍然没有运气:(

1 个答案:

答案 0 :(得分:1)

看起来你正在使用已经打开的文件:SplashScreen *以及该文件夹可能无法设置壁纸。

注意:“您的应用无法在任何文件夹中设置壁纸。复制ApplicationData.Current.LocalFolder中的文件并从那里设置壁纸”

所以我稍微更改了代码,并且还注意了documentation

  

<强> 说明

     

注意对于移动设备系列,您只能设置小于2兆字节(MB)的锁定屏幕图像。试图设定   锁定屏幕图像更大失败,即使是异步   操作返回true。
  注意多次设置图像时,新图像文件必须具有与先前设置的图像不同的名称。如果你设置了   使用与上一个图像同名的文件的新图像   会失败。

在此代码中,我将一个文件添加到名为img的文件夹中的Visual Studio Project中,并将图像属性设置为“Copy if newer”。然后我从这个位置加载图像。

async Task<bool> SetWallpaperAsync(string localAppDataFileName)
{
    bool success = false;
    var uri = new Uri($"ms-appx:///img/{localAppDataFileName}");

    //generate new file name to avoid colitions
    var newFileName = $"{Guid.NewGuid().ToString()}{Path.GetExtension(localAppDataFileName)}";

    if (UserProfilePersonalizationSettings.IsSupported())
    {
        var profileSettings = UserProfilePersonalizationSettings.Current;

        var wfile = await StorageFile.GetFileFromApplicationUriAsync(uri);

        //Copy the file to Current.LocalFolder because TrySetLockScreenImageAsync
        //Will fail if the image isn't located there 
        using (Stream readStream = await wfile.OpenStreamForReadAsync(),
                      writestream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(newFileName,
                                     CreationCollisionOption.GenerateUniqueName)
              )
        { await readStream.CopyToAsync(writestream); }

        StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(newFileName);
        success = await profileSettings.TrySetLockScreenImageAsync(file);
    }

    Debug.WriteLine(success);
    return success;
}

此代码在Windows Mobile 10中运行良好,因为这是一个通用应用程序,您应该期望它在Windows 10应用程序中以相同的方式运行......是的。

Letme知道这对你来说是否足够。