在Visual Studio 2017中为WPF应用程序创建MSI安装程序后,EXE不执行任何操作

时间:2017-12-20 08:13:40

标签: wpf windows-installer visual-studio-2017

我在Visual Studio中使用安装项目获取控制台应用程序没有任何问题,但是,直到现在,我总是运行我在Visual Studio中创建的任何WPF应用程序。这是我第一次尝试发布一个。如果我只知道如何处理子文件夹,我觉得这很简单。我有许多用于按钮的图像,用于徽标的PNG和两个PowerShell脚本。

images

other resources

我是否需要选择多个主输出?

setup wizard

以下是数据的用法供参考:

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。

2 个答案:

答案 0 :(得分:0)

我对这个主题不太熟悉,但是这里有一些建议:

使用Visual Studio

  1. 以交互方式运行项目(Debug => Start Debugging)。
  2. 转到Debug => Windows => Modules
  3. 您应该会看到为应用程序运行而加载的所有内容的列表。
  4. 坦率地说,我不确定这是否会为您提供所有类型的依赖项。可以有许多不同的类型,如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-setsWinSxS 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文件夹中(我有两个文件夹,这是没有意义的)。可执行文件现在有效。

相关问题