0

次の図を見ると、2 つの .dll が同じファイル パスにあるため、'RSR.exe' アプリケーションは問題なく動作します。ただし、これら 2 つの .dll が RSR.exe と同じファイル パス/ディレクトリに配置されていない場合、クラッシュ/「プログラムが動作を停止しました」という結果になります。

上記のコメントを読む

これは、私が使用しようとしている次のコードです。

public static MainForm _mainForm;

    static string subPath = @"C:\Users\Public\Documents\RSR";

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        if (!Directory.Exists(subPath))
        {
            Directory.CreateDirectory(subPath);

            if (IntPtr.Size == 4)
            {
                File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\MouseKeyboardActivityMonitor.dll", Properties.Resources.MouseKeyboardActivityMonitor);

                File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\WindowsFormsAero.dll", Properties.Resources.WindowsFormsAero);
            }
            else
            {
                File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\MouseKeyboardActivityMonitor.dll", Properties.Resources.MouseKeyboardActivityMonitor1);

                File.WriteAllBytes("C:\\Users\\Public\\Documents\\RSR\\WindowsFormsAero.dll", Properties.Resources.WindowsFormsAero);
            }
        }

        AssemblyName asm1 = AssemblyName.GetAssemblyName(@"C:\Users\Public\Documents\RSR\MouseKeyboardActivityMonitor.dll");
        Assembly.Load(asm1);

        AssemblyName asm2 = AssemblyName.GetAssemblyName(@"C:\Users\Public\Documents\RSR\WindowsFormsAero.dll");
        Assembly.Load(asm2);

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        using (_mainForm = new MainForm())
        {
            Application.Run(_mainForm);
        }

        Cursor normalCursor1 = new Cursor(new System.IO.MemoryStream(Properties.Resources.cursor_normal));
        SetSystemCursor(normalCursor1.Handle, 32512);
    }

次の図は、2 つの .dll が同じディレクトリ/パス内にない場合のクラッシュ情報の図です。

上記のコメントを読む

任意の支援をいただければ幸いです。

ありがとう。

4

1 に答える 1

2

DLL を埋め込みリソースとしてパッケージ化する必要がある場合は、動的アセンブリ解決を介して読み込むことができます。コードは、読み込み許可も実行する必要があります。

public static MainForm _mainForm;
{ 
  //Add this in your main initialization   
  AppDomain.CurrentDomain.AssemblyResolve+=new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.Contains("FullNameSpace.MouseKeyboardActivityMonitor"))
    {
        return Assembly.Load(Properties.Resources.MouseKeyboardActivityMonitor);
    }

    if (args.Name.Contains("FullNameSpace.MouseKeyboardActivityMonitor"))
    {
        return Assembly.Load(Properties.Resources.WindowsFormsAero);
    }

    return null;
}
于 2013-04-26T02:24:43.603 に答える