سؤال

لذلك لدي تطبيق C# صغير يحتاج إلى التحقق بشكل دوري من محتويات الدلائل على أجهزة متعددة على الشبكة.اعتقدت أنه يمكنني فقط قراءة \hostname\C$ كمسار دليل، ولكن مع فئة الدليل العادية لا يبدو أن هناك طريقة للمصادقة على الخوادم الأخرى حتى تتمكن من الوصول إلى المشاركة المخفية.أنا متأكد من أن هناك طريقة سهلة للقيام بذلك والتي تجاهلتها، ولكن في الوقت الحالي أشعر بالحيرة قليلاً.

هل كانت مفيدة؟

المحلول

من http://bytes.com/forum/thread689145.html:

يتم تشغيل جميع العمليات في سياق حساب المستخدم المسجل.إذا كنت ترغب في فتح ملف على جهاز كمبيوتر آخر ، فيجب أن يكون تطبيقك يعمل في سياق المستخدم الذي لديه أذونات لفتح الملفات على هذا الجهاز.يمكنك القيام بذلك مع انتحال شخصية.

يبدو أن الطريقة الأسهل هي منح المستخدم الحالي الحقوق المناسبة على الأجهزة الأخرى.

نصائح أخرى

للمصادقة بمشاركة لا يملك المستخدم الذي يقوم بتشغيل العملية الإذن بها (وهذا هو الحال غالبًا بالنسبة للمشاركات الإدارية)، حاول تشغيل الأمر net use:

net use SERVERNAME\IPC$ /user:USERNAME PASSWORD

حاول تشغيل هذا في عملية منفصلة قبل الكود الذي يحاول فعليًا الوصول إلى المشاركة، على سبيل المثال:

ProcessStartInfo psi = new ProcessStartInfo(
    "net", "use " + SERVERNAME + @"\IPC$ /user:" + USERNAME + " " + PASSWORD);
Process p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
p.Close();
// The code to access the share follows...

يعد هذا مفيدًا إذا لم يكن من المناسب منح الإذن للمشاركة لحساب المستخدم الذي يقوم بتشغيل العملية، على سبيل المثال.لنموذج أمان حيث يحتاج تطبيق المستخدم النهائي إلى الوصول إلى البيانات الموجودة على المشاركة والتي لا ينبغي للمستخدم نفسه الوصول إليها بشكل مباشر.

هل تبحث عن طريقة لتعيين المستخدم الحالي في وقت التشغيل؟

إذا لم يكن الأمر كذلك، فطالما أن المستخدم الذي يقوم بتشغيل العملية لديه حق الوصول إلى هذه الأجهزة، فسيعمل هذا من أجلك:

DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp");

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top