如果您觀察以下圖片,我的'RSR.exe'應用程序運行良好,因爲這兩個.dll文件位於相同的文件路徑上;但是,如果這些.dll文件與RSR.exe不在同一文件路徑/目錄中,將導致崩潰/'程序已停止工作'。運行時參考.dlls?
這裏是下面的代碼塊,我想沒有成功使用。
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 .dlls不在同一目錄/路徑中時的崩潰信息的圖片。
任何援助將不勝感激。
謝謝。
您有硬編碼路徑指向您的桌面;當然,如果dll在那裏丟失,它會崩潰。你爲什麼不直接引用它們作爲你的解決方案中的「添加引用...」。不應該使用Assembly.Load。 – loopedcode 2013-04-26 02:15:22
如果您必須使用嵌入式資源DLL,則可以使用我發佈的答案。 – loopedcode 2013-04-26 02:25:27
爲什麼在這個世界上你不能只用你的可執行文件分發這些DLL?爲什麼你需要嵌入它們?這將導致病毒掃描程序和安全策略出現各種問題。用戶不應該擁有對app目錄的寫入權限。 – 2013-04-26 05:05:40