我想将所有文件/资源嵌入到单个exe中(2个exe和ps1)
有可能吗?如何做到这一点,目前我已经设法发布项目,但在输出中还有其他文件(应用程序文件,应用程序清单和设置exe) - 我想嵌入到单个exe中。
做了一些阅读,似乎我可能需要嵌入资源并可能创建指针?或者在项目中嵌入图像资源,不确定我是否在正确的轨道和/或如何启动代码..
到目前为止我有什么
private Boolean Install_certificate()
{
try
{
var newProcessInfo = new System.Diagnostics.ProcessStartInfo()
{
FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe",
Verb = "runas",
Arguments = (@"–ExecutionPolicy Bypass ""script.ps1""")
};
System.Diagnostics.Process.Start(newProcessInfo);
// Install the cert & change proxy settings
//System.Diagnostics.Process.Start(@"script.ps1" );
return true;
}
catch
{
return false;
}
}
private Boolean Install_exe1()
{
try
{
// Install exe1
System.Diagnostics.Process.Start(@"setup1.exe");
return true;
}
catch
{
return false;
}
}
private Boolean Install_exe2()
{
try
{
// Install exe2
System.Diagnostics.Process.Start(@"setup2.exe");
return true;
}
catch
{
return false;
}
}
感谢帮助!
由于
答案 0 :(得分:1)
您可以使用System.Diagnostics.Process启动.exe文件。
您可以使用System.Management.Automation运行power shell脚本。
如果你的exes在命令提示符下使用它们的依赖项,你应该在C#
如果要将这些文件嵌入到c#项目中,可以add them as resources,当程序运行时,可以将二进制内容保存到exe文件中,然后执行它们:
简而言之,右键单击您的项目,选择属性,然后单击资源。单击链接以将默认资源文件添加到项目中,
然后在资源设计器中选择文件,然后添加资源并添加要嵌入的文件。这将创建一个Resources
文件,其中包含您的文件,您可以在应用程序中以byte[]
的形式访问这些文件。
然后,当应用程序启动时,将它们保存到磁盘并运行它们:
using System;
using System.IO;
using System.Diagnostics;
namespace myNs
{
class Program
{
static void unpack()
{
if (!File.Exists("exe1.exe"))
File.WriteAllBytes("exe1.exe", myNs.Properties.Resources.exe1);
if (!File.Exists("exe2.exe"))
File.WriteAllBytes("exe2.exe", myNs.Properties.Resources.exe2);
if (!File.Exists("ps1.ps")) if (!File.Exists("ps1.ps"))
File.WriteAllBytes("ps1.ps", myNs.Properties.Resources.ps1);
}
static void Main(string[] args)
{
unpack();
Process process = new Process();
process.StartInfo.FileName = "exe1.exe";
process.Start();
process.WaitForExit();
process = new Process();
process.StartInfo.FileName = "exe2.exe";
process.Start();
process.WaitForExit();
process = new Process();
process.StartInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe";
process.StartInfo.Arguments = "ps1.ps1";
process.Start();
process.WaitForExit();
}
}
}
答案 1 :(得分:0)
我的问题是关于将exe' s + powershell编译成单个exe而没有附加文件
您可以将ps1脚本添加为像Alexander Higgins所说的资源。
您可以使用Microsoft的工具ILMerge将两个程序集合并在一起。在这里,我们将Primary.dll
Secondary.dll
(和等)合并到Merged.dll
中,并将log.txt合并到合并中。
ilmerge /log:log.txt /out:Merged.dll Primary.dll Secondary.dll
因为EXE有一个入口点,你不能超过2个EXE,为了解决这个问题,只需将其中一个EXE更改为DLL(类库)。