Mã VBScript sau hoạt động prefectly tốt:Marshal.GetActiveObject() ném ngoại lệ MK_E_UNAVAILABLE trong C#
Dim App
Set App = GetObject("","QuickTest.Application")
App.Quit
Nhưng khi tôi dịch nó thành mã C# như sau:
class Program
{
[STAThread]
static void Main(string[] args)
{
object qtApp = Marshal.GetActiveObject("QuickTest.Application");
(qtApp as QuickTest.Application).Quit();
}
}
tôi nhận được ngoại lệ :
Ngoại lệ không được loại trừ của loại 'System.Runtime.InteropServices.COMException' xảy ra trong mscorlib.dll
Thông tin bổ sung: (Ngoại lệ từ HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))
Tôi không nghĩ rằng vấn đề có liên quan đến ROT, bởi vì mã vbscript hoạt động. Vì vậy, những gì là sai với mã C#?
cảm ơn! Tôi đã sử dụng mã của bạn để liệt kê các đối tượng trong ROT, việc tìm kiếm không có bất kỳ đối tượng liên quan đến QuickTest nào trong danh sách. Nhưng đủ kỳ lạ, mã vbscript vẫn hoạt động! Hàm GetObject() của vbscript có tìm kiếm ROT vì nó là đối tác C# không? – TomCaps
http://msdn.microsoft.com/en-us/library/kdccchxa%28v=vs.85%29.aspx MSDN GetObject Nhận xét thứ nhất: “Nếu tên đường dẫn là chuỗi có độ dài bằng không (" "), thì trả về GetObject một thể hiện đối tượng mới của kiểu được chỉ định. ”, vì vậy VBScript của bạn tạo ra thể hiện mới của QuickTest.Application và mã của bạn trong C# phải giống như var qtApp = new QuickTest.Application(); ... – MishaU
Tôi đã thay đổi mã C# thành var qtApp = new QuickTest.Application(); Và nó hoạt động! Cảm ơn nhiều! – TomCaps