ฉันต้องการให้แอปพลิเคชัน WPF ของฉันเปิดเบราว์เซอร์เริ่มต้นและไปที่หน้าเว็บบางหน้า ฉันจะทำอย่างไร?
ฉันต้องการให้แอปพลิเคชัน WPF ของฉันเปิดเบราว์เซอร์เริ่มต้นและไปที่หน้าเว็บบางหน้า ฉันจะทำอย่างไร?
คำตอบ:
System.Diagnostics.Process.Start("http://www.webpage.com");
หนึ่งในหลายวิธี
คำตอบที่ยอมรับใช้ไม่ได้บน. NET Core 3อีกต่อไป เพื่อให้ใช้งานได้ใช้วิธีการต่อไปนี้:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
แม้ว่าจะได้รับคำตอบที่ดี (โดยใช้Process.Start
) แต่จะปลอดภัยกว่าที่จะห่อหุ้มไว้ในฟังก์ชันที่ตรวจสอบว่าสตริงที่ส่งผ่านนั้นเป็น URI จริง ๆ เพื่อหลีกเลี่ยงการเริ่มกระบวนการสุ่มบนเครื่องโดยไม่ได้ตั้งใจ
public static bool IsValidUri(string uri)
{
if (!Uri.IsWellFormedUriString(uri, UriKind.Absolute))
return false;
Uri tmp;
if (!Uri.TryCreate(uri, UriKind.Absolute, out tmp))
return false;
return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps;
}
public static bool OpenUri(string uri)
{
if (!IsValidUri(uri))
return false;
System.Diagnostics.Process.Start(uri);
return true;
}
ไมโครซอฟท์อธิบายไว้ในKB305703บทความเกี่ยวกับวิธีการเริ่มต้นเบราเซอร์อินเทอร์เน็ตเริ่มต้นโปรแกรมโดยใช้ Visual C #
อย่าลืมตรวจสอบส่วนการแก้ไขปัญหา
คุณไม่สามารถเปิดหน้าเว็บจากแอปพลิเคชันที่ยกระดับได้ สิ่งนี้จะเพิ่มข้อยกเว้น 0x800004005 อาจเป็นเพราะ explorer.exe และเบราว์เซอร์ไม่ได้รับการยกระดับ
ที่จะเปิดตัวหน้าเว็บจากโปรแกรมประยุกต์สูงในเว็บเบราเซอร์ที่ไม่ใช่การยกระดับให้ใช้ รหัสทำโดยไมค์ฮ ฉันพยายามส่ง URL ไปยัง lpApplicationName แต่ไม่ได้ผล ไม่ใช่เมื่อฉันใช้ CreateProcessWithTokenW กับ lpApplicationName = "explorer.exe" (หรือ iexplore.exe) และ lpCommandLine = url
วิธีแก้ปัญหาต่อไปนี้ใช้งานได้: สร้าง EXE-project ขนาดเล็กที่มีงานเดียว: Process.Start (url) ใช้ CreateProcessWithTokenW เพื่อรัน. EXE ใน Windows 8 RC ของฉันใช้งานได้ดีและเปิดหน้าเว็บใน Google Chrome
Explorer.exe
เพื่อยกเลิกการยกระดับไม่ได้รับการสนับสนุน: "น่าเสียดายที่ทีมงาน Windows Shell ได้ตอบกลับว่าพฤติกรรมปัจจุบันของ" Explorer.exe AppName.exe "เป็นข้อบกพร่องและอาจใช้ไม่ได้ในการอัปเดต / เวอร์ชันของ Windows ในอนาคตแอปพลิเคชัน ไม่ควรพึ่งมัน”
นี่คือรหัสทั้งหมดของฉันวิธีการเปิด
มี 2 ตัวเลือก:
เปิดโดยใช้เบราว์เซอร์เริ่มต้น (ลักษณะการทำงานเหมือนเปิดในหน้าต่างเบราว์เซอร์)
เปิดผ่านตัวเลือกคำสั่งเริ่มต้น (ลักษณะการทำงานเหมือนกับคุณใช้คำสั่ง "RUN.EXE")
เปิดผ่าน 'explorer' (ลักษณะการทำงานเหมือนกับที่คุณเขียน url ไว้ใน url หน้าต่างโฟลเดอร์ของคุณ)
[ข้อเสนอแนะเพิ่มเติม] 4. ใช้ตำแหน่งของกระบวนการ iexplore เพื่อเปิด url ที่ต้องการ
internal static bool TryOpenUrl(string p_url)
{
// try use default browser [registry: HKEY_CURRENT_USER\Software\Classes\http\shell\open\command]
try
{
string keyValue = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\http\shell\open\command", "", null) as string;
if (string.IsNullOrEmpty(keyValue) == false)
{
string browserPath = keyValue.Replace("%1", p_url);
System.Diagnostics.Process.Start(browserPath);
return true;
}
}
catch { }
// try open browser as default command
try
{
System.Diagnostics.Process.Start(p_url); //browserPath, argUrl);
return true;
}
catch { }
// try open through 'explorer.exe'
try
{
string browserPath = GetWindowsPath("explorer.exe");
string argUrl = "\"" + p_url + "\"";
System.Diagnostics.Process.Start(browserPath, argUrl);
return true;
}
catch { }
// return false, all failed
return false;
}
internal static string GetWindowsPath(string p_fileName)
{
string path = null;
string sysdir;
for (int i = 0; i < 3; i++)
{
try
{
if (i == 0)
{
path = Environment.GetEnvironmentVariable("SystemRoot");
}
else if (i == 1)
{
path = Environment.GetEnvironmentVariable("windir");
}
else if (i == 2)
{
sysdir = Environment.GetFolderPath(Environment.SpecialFolder.System);
path = System.IO.Directory.GetParent(sysdir).FullName;
}
if (path != null)
{
path = System.IO.Path.Combine(path, p_fileName);
if (System.IO.File.Exists(path) == true)
{
return path;
}
}
}
catch { }
}
// not found
return null;
}
หวังว่าฉันจะช่วย
GetWindowsPath
ล่ะ?
ทางโรงเรียนเก่า;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
ใช้: openit("www.google.com");
ฉันมีวิธีแก้ปัญหานี้เนื่องจากวันนี้ฉันมีปัญหาคล้ายกัน
สมมติว่าคุณต้องการเปิดhttp://google.comจากแอปที่ทำงานด้วยสิทธิ์ผู้ดูแลระบบ:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);