答案 0 :(得分:0)
从技术上讲,你可以用这种方式做你要求的事情: 首先,将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包对你而言。
答案 1 :(得分:0)
实际上,通过执行几个步骤,过程非常容易!
根据Arnon Axelrod的回答,您应该将chromedriver文件作为嵌入式资源文件放置到项目中,并在应用程序加载时创建它。
您可以通过以下方法执行此操作:解决方案资源管理器->属性->(双击)Resources.resx
将弹出一个新标签页!然后您可以添加您的exe文件,如下图: Adding exe file as a resource
在下一步中,您应该从“ Solution Explorer”中选择添加的文件,并在所选文件的“ Properties”窗口中将其作为嵌入式资源文件。这张图片可能会为您提供更多帮助:Setting a resource file as an embedded resource file
然后,您可以使用以下功能来读取,创建和删除驱动程序文件:
//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(@".\\");
最好在创建上述对象之前检查文件是否存在!