从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.
重现错误的代码基于以下文章:
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;
}
我不知道发生了什么,我认为这是应用程序的功能。 但是我启用了用户帐户信息和图片库,但仍然没有运气:(
答案 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知道这对你来说是否足够。