2012-04-20 50 views
6

Tôi có ứng dụng Windows Forms (C#, NET 3.5) được cài đặt bằng trình cài đặt MSI. Trong ứng dụng này, tôi có một nút bấm khi mở một trình duyệt với một URL cụ thể. Tôi sử dụngC# Windows Forms không mở trình duyệt mặc định sau khi cài đặt

Process.Start(url); 

để mở trình duyệt. Điều này hoạt động tốt khi gỡ lỗi, nhưng sau khi cài đặt nó có ít hơn kết quả tối ưu. Ví dụ.

  • Nếu tôi cài đặt nó với tùy chọn Just Me được chọn, tôi mở trình duyệt mặc định trình duyệt (FF) với cài đặt hiện tại.
  • Nếu tôi cài đặt nó với các tùy chọn Mọi người, khi tôi bấm nút nó sẽ mở ra một phiên bản của trình duyệt IE với ra bất kỳ cài đặt gần đây của tôi (proxy, thanh công cụ hiển thị vv)

Theo như tôi có thể cho biết vấn đề này là do người dùng liên kết với ứng dụng khi cài đặt.

Có tính đến việc người dùng có thể yêu cầu proxy và cài đặt trình duyệt cá nhân và rằng lựa chọn Just Me, Everyone sẽ vẫn tiếp tục với người dùng. Hành động o khóa học tốt nhất là gì?

Tôi đã thử gọi Process.Start (url) với hiện đăng nhập người dùng bằng

ProcessStartInfo.UserName = Environment.UserName 

Nhưng nó cũng đòi hỏi phải có một mật khẩu và yêu cầu thông tin không phải là một lựa chọn.

Bạn có bất kỳ đề xuất nào khác không, tôi có đang sử dụng Process.Start() không chính xác, có cài đặt nào tôi cần thực hiện trong quá trình cài đặt không, có bất kỳ điều gì tôi đã bỏ sót không?

UPDATE: Sử dụng Process Explorer như data_smith đề nghị tôi nhận thấy như sau:

  • Nếu tôi cài đặt ứng dụng cho tất cả mọi người sẽ bắt đầu dưới NT AUTHORITY \ user HỆ THỐNG do đó trình duyệt chưa được cấu hình.
  • Nếu tôi cài đặt các ứng dụng với Just Me chọn nó bắt đầu dưới người dùng hiện

Có cách nào, mà không yêu cầu chứng chỉ, để làm cho sự bắt đầu ứng dụng (tại cửa sổ khởi động) theo người sử dụng hiện nay thậm chí mặc dù nó được cài đặt cho tất cả mọi người?

UPDATE: Tiếp theo là một gợi ý bởi data_smith sử dụng ShellExecute và những gợi ý herehere tôi đã có thể giải quyết vấn đề và nhận được hành vi mong muốn.

Vấn đề chính là khi trình cài đặt hoàn tất, ứng dụng đã được bắt đầu với Process.Start(); Điều này bắt đầu ứng dụng như người dùng NT AUTHORITY \ SYSTEM (người cài đặt người dùng chạy dưới), do đó tất cả các trình duyệt được mở bởi ứng dụng này cũng sẽ thuộc người dùng SYSTEM. Bằng cách sử dụng đề xuất từ ​​data_smith và các đề xuất được liên kết ở trên, tôi đã có thể bắt đầu quá trình theo người dùng hiện tại.

Sau khi khởi động lại máy tính, ứng dụng bắt đầu theo đúng người dùng vì điều này được định cấu hình thông qua các mục đăng ký.

+0

Bạn có chạy ứng dụng của mình từ trình cài đặt không? – ogggre

+0

Sau khi ứng dụng được cài đặt, nó sẽ bắt đầu ngay lập tức và nó luôn bắt đầu lúc khởi động máy. Nó nằm trong khay hệ thống. – Constantin

+2

Tôi nghĩ những gì @ogggre hỏi là, ứng dụng của bạn có được khởi chạy bởi trình cài đặt không? Đây có thể là vấn đề liên quan đến "thông tin xác thực". Sử dụng ProcExp (bởi SysInternals) để xem phụ huynh của bạn chương trình. – data

Trả lời

1

Tôi khuyên bạn nên truy cập sổ đăng ký để xác định trình duyệt mặc định.

//Create a registry key to read the default browser variable 
RegistryKey reader = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command"); 
//Determine the default browser 
string DefaultBrowser = (string)reader.GetValue(""); 

Tôi đã thử sử dụng mã này và phát hiện ra rằng khóa đăng ký của tôi đã kết thúc bằng "- \"% 1 \ "".
Tôi không biết tại sao nó lại ở đó, nhưng tôi khuyên bạn nên sử dụng vòng lặp sau đây để đảm bảo rằng phím kết thúc ở đúng nơi.

//If the path starts with a ", it will end with a " 
if (DefaultBrowser[0] == '"') 
{ 
    for (int count = 1; count < DefaultBrowser.Length; count++) 
    { 
     if (DefaultBrowser[count] == '"') 
     { 
      DefaultBrowser = DefaultBrowser.Remove(count + 1); 
      count = DefaultBrowser.Length + 22; 
     } 
    } 
} 
//Otherwise, the path will end with a ' ' 
else 
{ 
    for (int count = 0; count < DefaultBrowser.Length; count++) 
    { 
     if (DefaultBrowser[count] == ' ') 
     { 
      DefaultBrowser = DefaultBrowser.Remove(count + 1); 
      count = DefaultBrowser.Length + 22; 
     } 
    } 
} 
+0

Như đã nêu trong câu hỏi, vấn đề không phải là tìm trình duyệt mặc định, nó đang mở trình duyệt với tư cách người dùng hiện tại. – Constantin

+0

"Nếu tôi cài đặt nó với tùy chọn Mọi người, khi tôi nhấn nút, nó sẽ mở một phiên bản IE với bất kỳ cài đặt nào gần đây của tôi (proxy, thanh công cụ được hiển thị v.v.)" - Theo điều này, Constantin, vấn đề rõ ràng là tìm trình duyệt mặc định được liên kết với người dùng hiện tại. – Jack

0
using System.Diagnostics; 
using System.Windows.Forms; 

namespace WindowsFormsApplication13 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, System.EventArgs e) 
    { 
     // Add a link to the LinkLabel. 
     LinkLabel.Link link = new LinkLabel.Link(); 
     link.LinkData = "http://www.dotnetperls.com/"; 
     linkLabel1.Links.Add(link); 
    } 

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
    { 
     // Send the URL to the operating system. 
     Process.Start(e.Link.LinkData as string); 
    } 
    } 
} 
+1

Tôi đã tạo một ứng dụng độc lập thực hiện chính xác điều này và nó hoạt động như mong muốn. Vấn đề chỉ phát sinh khi ứng dụng được đi kèm với trình cài đặt và được cài đặt cho mọi người. – Constantin

Các vấn đề liên quan