从技术上讲,您可以按照以下方式执行操作:首先,将ChromeDriver.exe作为嵌入式资源添加到项目中(有关详细信息,请参阅https://support.microsoft.com/en-us/help/319292/how-to-embed-and-access-resources-by-using-visual-c)。这会将ChromeDriver.exe直接嵌入到已编译的应用程序中。然后,当您启动应用程序时,请读取该资源的内容(作为字节流)并将该内容写入新文件。将此文件命名为ChromeDriver.exe。这样您的应用程序就会从其自身“生成”ChromeDriver.exe。最后,实例化ChromeDriver类,并将路径传递给新创建的ChromeDriver.exe文件。
但是,虽然此解决方案看起来很酷,但单独嵌入ChromeDriver.exe是不够的。您还需要将所有引用(包括Webdriver.dll)放在与应用程序相同的文件夹中。事实上,大多数.NET应用程序只能通过复制文件夹来安装,但不能只作为单个文件安装。从理论上讲,你也可以将你的项目所需的所有dll嵌入到内存中,然后在施放器启动时加载到内存中,但对于大多数情况来说这是一个巨大的过度杀伤力。因此,如果可以接受部署文件夹而不是单个文件,则只需将ChromeDriver.exe添加到该输出文件夹(通过将其作为内容文件添加到项目中并使用“始终复制”设置),并保存所有工作从资源中产生它。
最后,一个重要的注意事项:如果您将ChromeDriver.exe嵌入到嵌入式资源中,那么在发布新版本时,您将更难以更新它,而不是使用将其作为单独文件安装的NuGet包。
实际上,通过以下几个步骤,这个过程非常简单!
//Reading and creating the chrome driver file
void ExtractResource(string path)
{
byte[] bytes = Properties.Resources.chromedriver;
File.WriteAllBytes(path, bytes);
}
//Create the chromedriver file on form load
private void Form1_Load(object sender, EventArgs e)
{
string exePath = ".\\ChromeDriver.exe";
ExtractResource(exePath);
}
//Deleting the created file
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
File.Delete(exePath);
}
ChromeDriver chromeDriver = new ChromeDriver(@".\\");
在创建上述对象之前,最好还是检查文件是否存在!