我在Visual Studio中使用安装项目获取控制台应用程序没有任何问题,但是,直到现在,我总是运行我在Visual Studio中创建的任何WPF应用程序。这是我第一次尝试发布一个。如果我只知道如何处理子文件夹,我觉得这很简单。我有许多用于按钮的图像,用于徽标的PNG和两个PowerShell脚本。
我是否需要选择多个主输出?
以下是数据的用法供参考:
PowerShell脚本(只显示相关代码):
private static string checkAppsScript = File.ReadAllText(@"scripts\checkApps.ps1");
private static string removeAllScript = File.ReadAllText(@"scripts\removeall.ps1");
PowerShell removePS = PowerShell.Create();
removePS.AddScript(removeAllScript);
PowerShell ps = PowerShell.Create();
ps.AddScript(checkAppsScript);
来自我的XAML的数据文件夹中的图像(有18只显示1):
<StackPanel Grid.Row="0" Grid.Column="0">
<Button Name="bingweatherBtn" Margin="10" Style="{StaticResource ImageButtonStyle}" Click="ImageBtn_Click">
<Button.BitmapEffect>
<DropShadowBitmapEffect Color="Black" Direction="320" Opacity="0.8"/>
</Button.BitmapEffect>
<Border BorderBrush="Black" BorderThickness="2">
<Image Source="data\weather_icon80x80.jpg"></Image>
</Border>
</Button>
<Label Content="Bing Weather" FontSize="14" FontWeight="SemiBold" Padding="0" HorizontalAlignment="Center"></Label>
</StackPanel>
我设法找到的所有教程都显示简单的控制台应用程序或简单的WPF应用程序而没有其他文件夹。创建我的.msi文件后,可执行文件什么都不做。它显示一个繁忙的动画大约一秒钟然后退出。
我在这里做错了什么?为什么我的应用只能在Visual Studio中运行?
注意:data和Resources文件夹中的所有内容都设置为“Build Action”的内容,PS脚本设置为Embedded Resource。我不知道这是否正确。目标平台设置为x64。
答案 0 :(得分:0)
我对这个主题不太熟悉,但是这里有一些建议:
使用Visual Studio :
Debug => Start Debugging
)。Debug => Windows => Modules
。坦率地说,我不确定这是否会为您提供所有类型的依赖项。可以有许多不同的类型,如the Dependency Walker help file中所述。
Dependency Walker是一个旧的Windows SDK工具。它现在已经过时了 - 自从我上次更新以来已超过10年。
确保在Visual Studio中部署为解决方案加载的文件(我想您应该运行发布版本) - 和/或确定部署运行时组件的正确运行时。
就个人而言,我会安装您现有的MSI文件,然后在发布位置的磁盘上一次放置一个文件,直到您的应用程序启动并运行。然后,您继续测试应用程序功能以识别任何进一步的依赖项。访问所有对话框并使用所有功能。
<强> Dependencies.exe 强>:
也许您也可以尝试在C#中部分完成Dependency Walker(上面提到的旧SDK工具)这一新的开源重写:&#34; Dependencies.exe&#34;。这个工具还没有完成,并没有提供Dependency Walker的所有功能(我无法看到exe文件的任何分析功能),但它支持API-sets和WinSxS dependencies - 或并行的Win32程序集(Dependency Walker中缺少)。我还没有足够的测试来真正推荐它 - 但它是开源的,因此可以检查。看来你需要自己从源头构建它(现在)。
答案 1 :(得分:0)
我删除了脚本并将其硬编码到MainWindow.xaml.cs文件中,如下所示:
private static string checkAppsScript = @"$appList = @('*BingNews*','*BingWeather*','*OneNote*','*WindowsAlarms*',
'*Recorder*', '*Maps*','*Camera*', '*Microsoft.People*',
'*xboxapp*', 'ZuneMusic*','*Messaging*', '*Builder*',
'*BubbleWitch*', '*Minecraft*', '*Spotify*',
'*Empires*', '*StickyNotes*', '*Skype*', '*SolitaireCollection*')
ForEach($app in $appList)
{
Get-AppxPackage | Select Name | Where-Object {$_.Name -like $app}
}";
我删除了图片并使用“添加现有项目”重新添加了图片。我最初使用的是“添加项目”。我将所有图像放在一个res文件夹中(我有两个文件夹,这是没有意义的)。可执行文件现在有效。