簡體   English   中英

在Visual Studio 2017中為WPF應用程序創建MSI安裝程序后,EXE不執行任何操作

[英]After creating MSI Installer for WPF app in Visual Studio 2017, EXE does nothing

我在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 and Resources文件夾中的所有內容均設置為“ Build Action”的內容,而PS腳本則設置為Embedded Resource。 我不知道這是否正確。 目標平台設置為x64。

我對這個主題不太熟悉,但是這里有一些建議:

使用Visual Studio

  1. 交互式運行項目( Debug => Start Debugging )。
  2. 轉到Debug => Windows => Modules
  3. 您應該看到為應用程序運行而加載的所有內容的列表。

坦率地說,我不確定這是否給您所有類型的依賴關系。 Dependency Walker幫助文件中此處所述,可以有許多不同的類型。

Dependency Walker是一個舊的Windows SDK工具。 到目前為止,它已經過時了-我認為上次更新已超過10年。

確保在Visual Studio中部署為解決方案加載的文件(我想應該運行發布版本)-和/或標識正確的運行時以部署運行時組件。

就個人而言,我將安裝您現有的MSI文件,然后一次在發布位置的磁盤上一次放置一個文件,直到您的應用程序啟動並運行。 然后,您將繼續測試應用程序功能,以識別任何其他依賴項。 訪問所有對話框並使用所有功能。


Dependencies.exe

也許您也可以嘗試對Dependency Walker (上面提到的舊SDK工具)進行這種新的開放源代碼重寫,該重寫部分通過C#完成:“ Dependencies.exe ”。 該工具尚未完成,並且沒有Dependency Walker的所有功能(我看不到exe文件的任何分析功能),但是它支持API集WinSxS依賴關系 -或並行 Win32程序集( Dependency Walker缺少的內容)。 我還沒有對其進行足夠的測試以至於不能真正推薦它-但它是開源的,因此可以檢查。 看來您需要自己從源代碼構建它(目前)。

我刪除了腳本並將其硬編碼到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文件夾中(我有兩個文件夾,這毫無意義)。 可執行文件現在可以工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM