2008-09-15 17 views
2

VB.Net winforms uygulamasının ağ üzerinden WMV dosyalarını oynatması gereken bir durum var. Uygulamayı çalıştıran kullanıcı ağ paylaşımına doğrudan erişilemez. Kimliğe bürünme yoluyla, dosyaların var olduğunu görebiliyorum (kimliğe bürünme olmadan, File.Exists ağ paylaşımındaki dosyalar için yanlış döndürür). Daha sonra dosyayı bir Windows Media Player denetimine yüklemeye çalıştığımda, kontrol sadece siyah kalır. Windows Media Player denetimi belleğe yüklendiğinde, .Net tarafından yönetilen iş parçacığından ayrı bir yönetilmeyen iş parçacığı üzerinde çalıştığı sonucuna varmıştım. Bu güvenlik belirtecini yönetilen ileti dizisinden yönetilmeyen iş parçacığına geçirmenin bir yolu var mı? Tamamen eksik bir şey mi duyuyorum?Yönetilmeyen Bir Konuya Yönetilen Bir Konudaki kimliğe bürünme jetonunu Geçme

cevap

0

Sana ağ paylaşımına giriş yapmak

[DllImport("advapi32.dll", SetLastError=true)] 
public static extern int LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 

kullanarak çalıştı varsayalım.

Tecrübemde konuyla ilgilenmiyor.

Yararlı olabileceğini düşünüyorsanız, size bir kullanım örneği gösterebilirim. Burada bahsetmek için uzun bir atış.

0

WMP'nin işlem belirteçinizden miras alan kendi iş parçacıklarını başlatması çok iyi bir olasılıktır, bu varsayılan :: CreateThread() davranışıdır. Bir iş parçacığı belirtecini dışarıdan değiştirmek mümkün olmadığından ve kontrolün bir belirteci parametre olarak kabul etmediği sürece yapabileceğiniz pek bir şey olmadığından eminim.

Başka bir işlemin içine koymanın dışında bir cevabın olduğundan emin değilim ve bu işlemi, oluşturduğunuz ya da dosyayı bir yere yerel olarak arabelleğe aldığınızı belirten :: CreateProcessAsUser() yöntemini kullanarak oluşturun.

1

AppDomain kapalı SetThreadPrincipal yöntemini kullanmayı denediniz mi?

Örnek: öncül doğru olup olmadığını WMV, yönetilmeyen çalıştırmak gibi görünüyor, sorunuzun belirtilen

IPrinicipal userPrincipal = new MyCustomPrincipal();

AppDomain currentDomain = AppDomain.CurrentDomain;

currentDomain.SetThreadPrincipal(userPrincipal);

yüzden, bu gerçekten olmamalı Çalış (ikinci cevabıma bakın).

0

WMV yürütücüsünün, AppDomain öğenizin dışında çalıştığını varsayarak, ağ üzerinden dosyaya erişmek için WPF/Silverlight ortam yürütücüsünü barındırmayı denerdim.