سؤال

لسبب غريب على فشل هذا الرمز:

p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";

وهذا الرمز ناجح:

p.StartInfo.FileName = @"C:\Users\USERNAME\AppData\Local\Temp\SSCERuntime_x86-ENU.msi";

هل هناك أي سبب أنا في عداد المفقودين?

ملاحظة أنا فقط نسخ المسار ، وأنا لا أعتقد أن هناك حاجة إلى بقية التعليمات البرمجية ولكن سأضعها على أي حال:

Process p = new Process();
p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";
p.StartInfo.Arguments = "/passive";
p.Start();
هل كانت مفيدة؟

المحلول

ال Process فئة لا يوسع السلاسل مع متغيرات البيئة (أي. %temp%).

إذا كنت ترغب في استخدام متغيرات البيئة لبناء FileName الممتلكات ثم سيكون لديك للحصول على متغيرات البيئة (باستخدام GetEnvironmentVariable الطريقة على ال Environment فئة) وقم بإجراء الاستبدال بنفسك ، مثل ذلك:

// Construct the path.
string temp = Environment.GetEnvironmentVariable("temp");
string path = Path.Combine(temp, "SSCERuntime_x86-ENU.msi");

// Launch the process.
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.Arguments = "/passive";
p.Start();

بالإضافة إلى ذلك ، يمكنك استخدام ExpandEnvironmentVariables الطريقة مع سلسلة الأصلي الخاص بك مثل ذلك:

p.StartInfo.FileName = 
    Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");

نصائح أخرى

يتم تفسير جزء من السلسلة من السلسلة حرفيا بدلا من الاستعاضة عن متغير البيئة المناسبة.ستحتاج إلى توسيعها يدويا

giveacodicetagpre.

٪ temp٪ يتم تحليلها وتقييمها بواسطة قذيفة الأوامر.يمكنك استخدام استخدام path.gettemppath () و path.combine لهذا الغرض.

giveacodicetagpre.

يمكنك استخدام Environment.ExpandEnvironmentVariables لتوسيع متغيرات البيئة داخل سلسلة ، ثم تمرير ذلك إلى Process فئة:

p.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");

هذا له فوائد إضافية تتمثل في

  1. العمل لأي متغير البيئة (٪أبداتا٪ ، ٪ كومونبروغرامفيلز٪ ، الخ) ، و
  2. العمل في أي مكان في السلسلة (على سبيل المثال ."٪درجة الحرارة٪ \ ٪ اسم المستخدم٪ \ فو.النص")

جرب هذا:

giveacodicetagpre.

ثم Concat IT:

giveacodicetagpre.

فازني كاسبر على المثقب على التفسير، ولكن الطريقة العملية. تعامل الأساس بشكل أساسي حرفيا بدلا من إتسلابها كما كانت الشل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top