विस्टा या बाद में अन्य सत्र में चलने वाली सेवाएं और सेवाओं से सीधे शुरू की गई एप्लिकेशन डिफ़ॉल्ट रूप से उसी सत्र में शुरू की जाती हैं। अन्य सत्रों में एप्लिकेशन शुरू करना संभव है - आपको उपयोगकर्ता सत्र की आईडी खोजनी है और CreateProcessAsUser का उपयोग करना है।
यदि एक से अधिक उपयोगकर्ता लॉग इन हैं और आपको सभी उपयोगकर्ताओं के लिए अपना प्रोग्राम शुरू करने की आवश्यकता है तो आपको सभी सत्रों के आईडी मिलना चाहिए।
यहाँ नमूना कोड है:
int session = Win32.WTSGetActiveConsoleSessionId();
if (session == 0xFFFFFFFF)
{
return false;
}
IntPtr userToken;
bool res = Win32.WTSQueryUserToken(session, out userToken);
if (!res)
{
this.log.WriteEntry("Error WTSQueryUserToken");
return false;
}
string path = GetPath();
string dir = Path.GetDirectoryName(path);
Win32.STARTUPINFO si = new Win32.STARTUPINFO();
si.lpDesktop = "winsta0\\default";
si.cb = Marshal.SizeOf(si);
Win32.PROCESS_INFORMATION pi = new Win32.PROCESS_INFORMATION();
Win32.SECURITY_ATTRIBUTES sa = new Win32.SECURITY_ATTRIBUTES();
sa.bInheritHandle = 0;
sa.nLength = Marshal.SizeOf(sa);
sa.lpSecurityDescriptor = IntPtr.Zero;
if (!Win32.CreateProcessAsUser(userToken, // user token
path, // exexutable path
string.Empty, // arguments
ref sa, // process security attributes (none)
ref sa, // thread security attributes (none)
false, // inherit handles?
0, // creation flags
IntPtr.Zero, // environment variables
dir, // current directory of the new process
ref si, // startup info
out pi)) // receive process information in pi
{
int error = Marshal.GetLastWin32Error();
this.log.WriteEntry("Error CreateProcessAsUser:" + error);
return false;
}
आप क्या उम्मीद करते हैं? इसके बजाय बैच फ़ाइल चलाने का प्रयास करें। –
आप किस प्रकार का एक्सी लॉन्च करने की कोशिश कर रहे हैं? – abhilash
कृपया अपने प्रश्न को और अधिक सार्थक रूप से दोहराएं। प्रश्नों की सूची के माध्यम से यह बहुत कुछ नहीं बताता है ... – Hemant