|
i used this code to play a video on a panel control
using Microsoft.DirectX.AudioVideoPlayback;
private void open(string path)
{
try
{
myvideo = new Video(path);
myvideo.Owner =panel1;
myvideo.Play();
}
catch
{
}
}
but when i run the program it keeps saying
"Loader Lock was detected:
DLL 'C:\Windows\assembly\GAC\Microsoft.DirectX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang."
if i press the run button again it continues excuting normally. What's wrong with the code and how do i fix it???
modified on Friday, December 11, 2009 2:14 PM
|
|
|
|
|
I Could be bug, Please try to update DirectX to newest. I Know that Microsft didn't update Managed Direct X for quite a while. You coud look at the alternative:
slimDX[^]
|
|
|
|
|
Hello
I would like to know difference betwen casting and if there is one, then in which conditions shroud be used
Example:
TextBox txt = new TextBox;
Object obj = txt;
// What is the difference between these 2 castings
TextBox txt1 = (TextBox) txt;
TextBox txt2 = txt as TextBox;
This may be stupid question but thanks in advance
|
|
|
|
|
|
And in general, I prefer using 'as', but it depends on your situation. If you want an exception to be thrown, use explicit casting (ex. "((TextBox)obj) "). Generally, its good to avoid exceptions unless there's just nothing you can do to avoid the 'exceptional' behavior.
|
|
|
|
|
Thanks to both replies. Those answer extinguish my curiosty
|
|
|
|
|
Also, the C-style cast can be overloaded, but as can not be overloaded.
|
|
|
|
|
I've created a control to embed a MSWord document based on several projects here. The embeding it's self works great but I am having trouble figuring out how to bind event handlers. See below for an example.
Word.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(OnClose);
The above line works with doing early binding, but due to the variations in version of Office being used in the company, I need to do late binding. Anyone got any ideas?
Thank you,
Eric Ritzie
|
|
|
|
|
I Don't think you can do it that way. There are 2 options that I thought:
1. Option:
Install same version of Office
2. Option:
Use different module (dll) based on Office installed
3. Option: (I Don't know how to do it in C#
Use compiler directive and compile different exe files
|
|
|
|
|
Hmmm.....Option 1 is not really feesable because of cost. Options 2 and 3 would be a big pain although they are doable.
I think there has to be a way to do what I am trying to accompish biw the Interop. I'm able to get and set properties by using type.InvokeMember() and I can even get an event object by using type.GetEvent(), I just need that last little bit to bind it to my event handlers.
Thank you,
Eric Ritzie
|
|
|
|
|
I am at a lost. I have verified what I am doing against the documentation on microsofts website:
http://msdn.microsoft.com/en-us/library/aa392154(VS.85).aspx[^] and I just can't figure out why it would give me this error.
My Connection object is not shown as it is global within the class I have it in. I am connect to this machine that is not on the domain and get installed applications, all services, and computer information. The problem is it keeps throwing a "Invalid Method Parameter(s)" error.
In case your wondering.. I ran a foreach look on the inParams.Properties and verified that all the method parameters existed in the inParams (which it does).
Any help would be great!
public string Join(string dns, string domain, string username, string password)
{
try
{
ManagementScope scope = new ManagementScope(@"\\" + dns + @"\root\CIMV2", conn);
ManagementPath path = new ManagementPath("Win32_ComputerSystem");
ManagementClass mgmtClass = new ManagementClass(scope, path, null);
ManagementBaseObject inParams = mgmtClass.GetMethodParameters("JoinDomainOrWorkgroup");
inParams["Name"] = domain;
inParams["UserName"] = username;
inParams["Password"] = password;
inParams["AccountOU"] = null;
inParams["FJoinOptions"] = (UInt32)1;
ManagementBaseObject outParams = mgmtClass.InvokeMethod("JoinDomainOrWorkgroup", inParams, null);
string status = ReturnedValue.JoinDomainOrWorkgroup(Convert.ToInt32(outParams["ReturnValue"]));
return status;
}
catch (Exception ex)
{
EventLog.WriteEntry("ADEM Application", ex.Message, EventLogEntryType.Error);
return ex.Message;
}
}
|
|
|
|
|
Hi Jacob,
I'm not familiar with the specifics of your query, however I strongly advice everyone to always look at Exception.ToString() as it often contains much more than a Message and a TraceBack; there may be additional information, and one or more inner exceptions.
|
|
|
|
|
Good idea.. but I didn't really find anything worth while that I can see. I even set break points and can't seem to find out why it is doing this.. WMI is a pain sometimes
System.Management.ManagementException: Invalid method Parameter(s)
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options)
at WMI.WMI_Commands.Join(String dns, String domain, String username, String password) in C:\Users\jdixon\Documents\Visual Studio 2008\Projects\DLL\WMI\frmWMI.cs:line 92
|
|
|
|
|
As you have posted that link, I presume you are using PInvoke of JoinDomainOrWorkgroup
I saw that it expects to pass 5 parameters (According to MSDN) and you are using only one
|
|
|
|
|
I am passing 4 parameters:
inParams["Name"] = domain;
inParams["UserName"] = username;
inParams["Password"] = password;
inParams["AccountOU"] = null;
inParams["FJoinOptions"] = (UInt32)1;
I am actually specifying 5 but the AccountOU one is optional. This is using WMI
|
|
|
|
|
Your Code:
ManagementBaseObject outParams = mgmtClass.InvokeMethod("JoinDomainOrWorkgroup", inParams, null);
string status = ReturnedValue.JoinDomainOrWorkgroup(Convert.ToInt32(outParams["ReturnValue"]));
At witch line it does fail?
Also how do you use define how do you use that delegate?
|
|
|
|
|
Fails:
ManagementBaseObject outParams = mgmtClass.InvokeMethod("JoinDomainOrWorkgroup", inParams, null);
|
|
|
|
|
try
{
ManagementObject classInstance =
new ManagementObject("root\\CIMV2",
"Win32_ComputerSystem.Name='BSAKSIDA-PC'",
null);
ManagementBaseObject inParams =
classInstance.GetMethodParameters("JoinDomainOrWorkgroup");
inParams["AccountOU"] = " OU=testOU, DC=domain, DC=Domain, DC=com";
inParams["Name"] = "WORKGROUP";
inParams["Password"] = null;
inParams["Username"] = "everyone";
ManagementBaseObject outParams =
classInstance.InvokeMethod("JoinDomainOrWorkgroup", inParams, null);
Console.WriteLine("Out parameters:");
Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
}
catch(ManagementException err)
{
MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message);
}
I Used this example to get it working on mine side. I do not know how to do it in your case, because i only have Workgroup not domain
WMI Code Creator[^]
I Used that tool (Can run C# code as script) to create that WMI call. I do not know why it fail, bat play with that tool.
Tip: Look at »Execute a Method«, under menu select apropriate target. Method [in] Parameters are buggy, so write manualy inside generated code on left. You can directly execute the code without Visual Studio
|
|
|
|
|
I am using the WMI Code Creator also.
I modified what you supplied a little and still have no luck.
try
{
ManagementObject classInstance = new ManagementObject("\\WIN-HSPKIXZR3HK\\root\\CIMV2", "Win32_ComputerSystem", null);
ManagementBaseObject inParams = classInstance.GetMethodParameters("JoinDomainOrWorkgroup");
inParams["AccountOU"] = " OU=Computers, DC=adem, DC=arkansas, DC=gov";
inParams["Name"] = "WORKGROUP";
inParams["Password"] = null;
inParams["Username"] = "everyone";
ManagementBaseObject outParams = classInstance.InvokeMethod("JoinDomainOrWorkgroup", inParams, null);
Console.WriteLine(outParams["ReturnValue"]);
}
catch (ManagementException err)
{
Console.WriteLine(err.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
ERROR:
Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.4927
for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.
System.ArgumentOutOfRangeException: Specified argument was out of the range of v
alid values.
Parameter name: path
at System.Management.ManagementObject.ManagementObjectCTOR(ManagementScope sc
ope, ManagementPath path, ObjectGetOptions options)
at System.Management.ManagementObject..ctor(String scopeString, String pathSt
ring, ObjectGetOptions options)
at WMISample.CallWMIMethod.Main()
C:\Windows\Microsoft.NET\Framework\v2.0.50727>
I also tried this way which is more like what you supplied:
try
{
ManagementObject classInstance = new ManagementObject("\\root\\CIMV2", "Win32_ComputerSystem.Name='WIN-HSPKIXZR3HK'", null);
ManagementBaseObject inParams = classInstance.GetMethodParameters("JoinDomainOrWorkgroup");
inParams["AccountOU"] = " OU=Computers, DC=adem, DC=arkansas, DC=gov";
inParams["Name"] = "WORKGROUP";
inParams["Password"] = null;
inParams["Username"] = "everyone";
ManagementBaseObject outParams = classInstance.InvokeMethod("JoinDomainOrWorkgroup", inParams, null);
Console.WriteLine(outParams["ReturnValue"]);
}
catch (ManagementException err)
{
Console.WriteLine(err.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
With ERROR:
Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.4927
for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.
System.Management.ManagementException: Not found
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStat
us errorCode)
at System.Management.ManagementObject.Initialize(Boolean getObject)
at System.Management.ManagementBaseObject.get_wbemObject()
at System.Management.ManagementObject.get_ClassPath()
at System.Management.ManagementObject.GetMethodParameters(String methodName,
ManagementBaseObject& inParameters, IWbemClassObjectFreeThreaded& inParametersCl
ass, IWbemClassObjectFreeThreaded& outParametersClass)
at System.Management.ManagementObject.GetMethodParameters(String methodName)
at WMISample.CallWMIMethod.Main()
C:\Windows\Microsoft.NET\Framework\v2.0.50727>
|
|
|
|
|
I Have tried both example. I do not know why it fails, but the second fails because WIN-HSPKIXZR3HK is incorectly. The example I provided connects to LocalHost (Same Computer). It is very hard to help if you want to connect to Domain, because I can not test it. (Probably i wolould Need dedicated machine with Windows 2003 server or 2008 server). Have you tried to put IP for destenation computer?
|
|
|
|
|
I understand. I think it is something wrong with the code provided by microsoft. I have googled this with no luck of anyone doing it with a remote computer. Technically it should work. Using code like I have provided, I am able to install software, uninstall software, get list of services, get list of disk drives with amount of space, free space, etc... and even model and vendor information about the computer.
The fact that the error it gives me is "Invalid Method Parameters" tells me that the code on MSDN is fishy. It doesn't say it can't work for a remote computer...
I don't know..
Let me ask you this, do you know if there is any way to accomplish this with PInvoke? I know there is this: http://www.pinvoke.net/default.aspx/netapi32/NetJoinDomain.html[^] but that seems only able to join the local computer to the domain. Not a remote computer
|
|
|
|
|
You know I think I can make NetJoinDomain work. I can write a console application that takes the arguments as the information used to join the local computer... but what I can do is copy the console application to the computer, execute that console application from a remote computer using Win32_Process and then reboot it if it was successful
|
|
|
|
|
That could be done. I suggest to try to go to Microsoft forums for more info about this problem.
|
|
|
|
|
I have posted.. just FYI I have even tried the Reboot under Win32_OperatingSystem. It gives me a "Invalid Method Parameters" as well.. funny thing is this doesn't take any parameters! Lokos like part of WMI is crap
|
|
|
|
|
For myself I do not use WMI. My programming is Hobby. Please let me know if you will get positive answer.
One way to solve it is to create specific process (Possibly Service) and it acs as server, where it is capable to execute your commands or even scripts
|
|
|
|