For the "one file" requirement, you probably want to add the mht to your executable as a resource. This can be done by viewing the project's properties on the Resources tab. Click Add Resource, Add Existing File. Choose the file. After doing this,I would recommend changing the FileType on the Properties window to Binary.
You could now use System.IO.Path.GetTempFileName andSystem.IO.File.WriteAllBytes(tempFileName,
Properties.Resources.MyResourceName)to write it to a temporary file. Then use the WebBrowser.Navigate method on that temporary file.
If you really do not want to write the temp file, I think the only alternative is to implement a "temporary protocol handler" (i.e., a special prefix such as custom:// instead of http://). This is entirely COM interop and involves the IInternetSession::RegisterNameSpace method. It requires you provide classes implementing the IInternetProtocol and IInternetProtocolRoot interfaces. This may well be too much work for your scenario.