1

我试图让我的 WPF 窗口通过 DLL 注入和远程 CLR 托管从另一个进程内部显示。我知道 CLR 已正确托管并且能够运行代码,因为我可以使用 ICLRRuntimeHost::ExecuteInDefaultAppDomain(); 从远程进程内部创建 MessageBox();

但是,当我尝试显示我的 WPF 窗口(已编译到类库中)时,什么也没有发生。我尝试了以下方法:

public static int Display(String pwzArgument)
{
    App thisApp = new App();
    thisApp.Run();
    return 0;
}

并且:

public static int Display(String pwzArgument)
{
    MainWindow win = new MainWindow();
    win.Show();
    return 0;
}

我的 App.xaml 和 MainWindow.xaml:

// App.xaml
<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="WPFTest.App"
    StartupUri="MainWindow.xaml" Startup="Application_Startup">
    <Application.Resources>
        <!-- Resources scoped at the Application level should be defined here. -->
    </Application.Resources>
</Application>
//MainWindow.xaml
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
    x:Class="WPFTest.MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="378" Foreground="{x:Null}" Visibility="Visible" Topmost="True" Background="{x:Null}">

    <Grid>
        <Rectangle Stroke="Black" RadiusX="20" RadiusY="20" StrokeThickness="0.5">
            <Rectangle.Fill>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FF13DCF2" Offset="0"/>
                    <GradientStop Color="#FF0D0D0D" Offset="1"/>
                    <GradientStop Color="#FFF2F2F2" Offset="0.289"/>
                    <GradientStop Color="#FF8C8C8C" Offset="0.56"/>
                    <GradientStop Color="#FF262626" Offset="0.819"/>
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <Button Content="X" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,17,0" FontWeight="Bold"/>
        <Button Content="[ ]" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,34.077,0" FontWeight="Bold"/>
        <Button Content="_" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,56.247,0" FontWeight="Bold"/>
        <Label Content="Injected WPF Test" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="12,-3,0,0" FontSize="18.667" FontStyle="Italic"/>
        <Rectangle HorizontalAlignment="Left" StrokeThickness="0" Margin="0,31,0,52" Width="640" Fill="#53000000"/>
        <Label Content="Placeholder:&#xa;" HorizontalAlignment="Left" Margin="0,162.678,0,173.401" d:LayoutOverrides="HorizontalAlignment, Height"/>
        <Label Content="Process Name:&#xa;" Margin="0,121.124,0,0" d:LayoutOverrides="HorizontalAlignment" HorizontalAlignment="Left" VerticalAlignment="Top"/>
        <Label Content="PID:" Margin="0,79.204,0,0" HorizontalAlignment="Left" Height="41.92" VerticalAlignment="Top"/>
        <Label Content="Placeholder:&#xa;" HorizontalAlignment="Left" Margin="0,0,0,121.124" VerticalAlignment="Bottom" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
        <Label Content="Placeholder:&#xa;" HorizontalAlignment="Left" Margin="0,0,0,79.204" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Bottom"/>
        <Label Content="PID_CONTENT&#xa;" HorizontalAlignment="Left" Margin="87.513,79.204,0,218" d:LayoutOverrides="HorizontalAlignment" Name="PIDCONTENT" Loaded="PIDCONTENT_Loaded" />
        <Label Content="PROCNAME&#xa;" HorizontalAlignment="Left" Margin="87.513,121.124,0,0" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Top" Name="PROCNAME" Loaded="PROCNAME_Loaded" />
        <Label Content="PLACEHOLDER&#xa;" HorizontalAlignment="Left" Margin="87.513,163.044,0,163.043" d:LayoutOverrides="HorizontalAlignment, Height"/>
        <Label Content="PLACEHOLDER&#xa;" HorizontalAlignment="Left" Margin="87.513,0,0,121.123" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Bottom"/>
        <Label Content="PLACEHOLDER&#xa;" HorizontalAlignment="Left" Margin="87.513,0,0,79.203" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Bottom"/>
    </Grid>
</Window>

以上方法均不显示任何窗口。我对 WPF 很陌生,我确信我缺少一些东西。

4

0 回答 0