मैं वर्तमान में .NET में एक आंतरिक अनुप्रयोग बनाए रखता हूं। एप्लिकेशन एक समय में एक चल रहे सत्र को बनाए रखने के लिए आईपीसी का उपयोग करता है; यदि कोई अन्य सत्र खोलने का प्रयास करता है (कोई आइकन फिर से क्लिक करता है, तो कुछ सहेजे गए परिणाम फ़ाइल को खोलता है), दूसरा सत्र इसे पहले सत्र में संचारित करता है और फिर पहले सत्र के साथ अनुरोधित कार्रवाई को लॉन्च करता है।स्थानीय व्यवस्थापक होने के बिना आईपीसी का उपयोग कैसे करें?
मैं वर्तमान में उपयोग कर ऐसा करने System.ServiceModel नाम स्थान है, तो जैसे:
नाम स्थान EventLogViewer.IPCServer { // आम ढांचे प्रक्रियाओं oneanother को संवाद करने के लिए प्रदान करता है।
[ServiceContract(Namespace = "http://ELV.domain")]
interface IELVLauncher
{
[OperationContract]
bool LaunchTabs(String[] fileNames);
}
public delegate void TabLauncher(String[] fileNames);
class ELVLauncherServer : IDisposable
{
ServiceHost ipcService;
public ELVLauncherServer()
{
Uri baseAddress = new Uri("Http://localhost:45600/elvlauncher/service");
String address = "net.pipe://localhost/elvlauncher/tablauncher";
ipcService = new ServiceHost(typeof(ELVLauncher), baseAddress);
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
ipcService.AddServiceEndpoint(typeof(IELVLauncher), binding, address);
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://localhost:45601/elvlauncher");
ipcService.Description.Behaviors.Add(behavior);
Utilities.WriteMemoryDebugStatement(new DebugStatement(DebugStatement.StatementType.INFO, "Registering IPC Service"));
ipcService.Open();
}
#region IDisposable Members
public void Dispose()
{
ipcService.Close();
}
#endregion
}
public class ELVLauncher : IELVLauncher
{
#region IELVLauncher Members
public bool LaunchTabs(string[] fileNames)
{
try
{
Utilities.WriteMemoryDebugStatement(new DebugStatement(DebugStatement.StatementType.INFO, String.Format("IPC request received, files: {0}", String.Join(", ", fileNames))));
Program.mainWindow.backgroundListener_OnLaunchRequestReceived(fileNames);
}
catch (Exception exception)
{
Utilities.WriteMemoryDebugStatement(new DebugStatement(exception));
}
return (true);
}
#endregion
}
यह कोड मूल रूप से विंडोज एक्सपी के तहत विकसित किया गया था, जैसा कि अधिकांश निगमों को हम Vista में नहीं गए थे। चूंकि हम सभी स्थानीय प्रशासकों के रूप में दौड़ते हैं, इसलिए यह कोड बिना किसी समस्या के भाग गया।
हालांकि, हम अब विन 7 में संक्रमण कर रहे हैं, और यह कोड स्टार्टअप पर अपवाद उत्पन्न करता है क्योंकि यह आईपीसी एंडपॉइंट पंजीकृत नहीं कर सकता है। अधिक जानकारी यहां है: http://mark.michaelis.net/Blog/WindowsCommunicationFoundationWithWindowsVistaAndUAC.aspx
दिए गए कार्यवाही को व्यवस्थापक निजीकरण की आवश्यकता के लिए ऐप को अपनाना है। यह दो कारणों से काम नहीं करता है:
- इस एप्लिकेशन को व्यवस्थापक privledges की जरूरत नहीं है अन्यथा
- हमने अपने आंतरिक उपकरणों की तैनाती के लिए ClickOnce का उपयोग करें और ClickOnce प्रक्रिया लांचर के रूप में चल के अलावा और कुछ का समर्थन नहीं करता।
तो इस बिंदु पर मुझे एक आईपीसी समाधान खोजने की आवश्यकता है जिसके लिए व्यवस्थापक निजीकरण की आवश्यकता नहीं है और मुझे मूल लक्ष्य प्राप्त करने की आवश्यकता है: कोड के पहले से चल रहे उदाहरण का पता लगाना और यह कहना कि क्या करना है, अन्यथा खुद को लॉन्च करना। क्या करना है (नेट फ्रेमवर्क के भीतर, कोई तृतीय पक्ष समाधान कृपया) पर कोई सुझाव बहुत सराहना की जाएगी।
शीर्षक में ".NET 3.5 C#:" टैग दोहराएं। –